Autor Zpráva
Marek_k
Profil *
Ahoj, celej den si lámu hlavu, kde mám chybu, mám tento sql:

 $sql = "UPDATE `tabulka` SET `firstname` = ".$db->sql_string($ar[18]).", 
												`surname` = ".$db->sql_string($ar[19]).", 
												`hoteltaxi = ".$db->sql_integer($ar[1]).", 
												`pax` = ".$db->sql_integer($ar[2]).", 
												`starttime` = '".trim(date("Y-m-d H:i:s", mktime(givFromZeroNULL($ar[7]), givFromZeroNULL($ar[8]), 0, givFromZeroNULL($ar[5]), givFromZeroNULL($ar[4]), givFromYearNULL($ar[6]))))."', ";
												if($ar[10] && $ar[11] && $ar[12] && $ar[13] && $ar[14]) {
												$sql .= "`pickuptime` = '".date("Y-m-d H:i:s", mktime(givFromZeroNULL($ar[13]), givFromZeroNULL($ar[14]), 0, givFromZeroNULL($ar[11]), givFromZeroNULL($ar[10]), givFromYearNULL($ar[12])))."', ";
												}
												
												$sql .= " 
												`hotelname` =  ".$db->sql_string($ar[9]).", 
												`price` =  ".$db->sql_double($ar[15]).", 
												`currency` =  ".$db->sql_string($ar[16]).", 
												`payment` =  ".$db->sql_string($ar[17]).", 
												`preselection` =  ".$db->sql_string($ar[20]).", 
												`phone` =  ".$db->sql_integer($ar[21]).", 
												`email` =  ".$db->sql_string($ar[22]).", 
												`note` =  ".$db->sql_string($ar[23]).", 
												`next_note` =  ".$db->sql_string($ar[24]).", 
												`is_ended` =  ".$db->sql_integer(1).", 
												`datein` = NOW()  
												WHERE
												`control_hash` = ".$db->sql_string($ar[25])." and id = ".$db->sql_integer($_SESSION['control_id'])." 
												";
												
												
									///////////////////////////////
									////// Zkusíme uložit /////
									///////////////////////////////
										
										$c = $db->execute($sql, __FILE__, __LINE__);


Píše mi to chybu na řádku kde je $c, tedy pokus o uložení, píše to toto:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'pax` = 15,
`starttime` = 2008-08-02 12:00:00,
`hote' at line 3


když si vypíšu sql, vidím toto:
UPDATE `tabulka` SET `firstname` = 'Marek', `surname` = 'Testuser', `hoteltaxi = 0, `pax` = 15, `starttime` = '2008-08-02 12:00:00', `hotelname` = '', `price` = 99, `currency` = 'GBP', `payment` = '1', `preselection` = '+44', `phone` = 2547896, `email` = 'testuser@seznam.cz', `note` = '', `next_note` = '', `is_ended` = 1, `datein` = NOW() WHERE `control_hash` = '6465b8a2d00ae65d257b47ef78bfe291' and id = 110

Tabulka je:
CREATE TABLE `tabulka` (
`id` int(20) NOT NULL auto_increment,
`trip` varchar(200) collate utf8_unicode_ci NOT NULL,
`firstname` text collate utf8_unicode_ci NOT NULL,
`surname` text collate utf8_unicode_ci NOT NULL,
`hoteltaxi` tinyint(3) NOT NULL default '0',
`pax` tinyint(4) NOT NULL default '1',
`starttime` datetime NOT NULL,
`pickuptime` datetime NOT NULL,
`hotelname` text collate utf8_unicode_ci NOT NULL,
`price` double(11,2) NOT NULL default '0.00',
`currency` varchar(10) collate utf8_unicode_ci NOT NULL,
`payment` varchar(100) collate utf8_unicode_ci NOT NULL,
`preselection` varchar(100) collate utf8_unicode_ci NOT NULL,
`phone` int(11) NOT NULL default '0',
`email` varchar(100) collate utf8_unicode_ci NOT NULL,
`note` text collate utf8_unicode_ci NOT NULL,
`next_note` text collate utf8_unicode_ci NOT NULL,
`is_waiting` tinyint(4) NOT NULL default '0',
`is_ended` tinyint(3) NOT NULL default '0',
`control_hash` varchar(100) collate utf8_unicode_ci NOT NULL default '0',
`read` text collate utf8_unicode_ci NOT NULL,
`born` datetime NOT NULL,
`datein` datetime NOT NULL,
`authent_email` varchar(100) collate utf8_unicode_ci NOT NULL,
`update` datetime NOT NULL,
`userID` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `control_hash` (`control_hash`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=111 ;


už jsem asi slepej :(
Marek_k
Profil *
ještě dodám, co znamná:
 // escape znaků ' " '
  function sql_string($txt) {

  $txt = trim($txt);
		$txt = eregi_replace("select", " ", $txt);
		$txt = eregi_replace("drop", " ", $txt);
		$txt = eregi_replace(";", " ", $txt);
		$txt = eregi_replace("--", " ", $txt);
		$txt = eregi_replace("insert", " ", $txt);
		$txt = eregi_replace("delete", " ", $txt);
		$txt = eregi_replace("xp_", " ", $txt);
		$txt = trim($this->mysqli->real_escape_string($txt));
      return "'". $txt ."'";  
	
   }
	  
	function sql_integer($int) {
      return intval(trim($int) + 0);  
	}
	
	function sql_double($int) {
      return round(trim($int), 1);  
	}
Kajman_
Profil *
Za hoteltaxi nemáte zpětný apostrof.
Marek_k
Profil *
Jste bůh, díky. :-)
Marek_k
Profil *
A propo, teď úplně mimo tento problém, jak funguje hlášení chyb v mysql?

Když mi to hodí chybu a vypíše s tím i část sql příkazu, je to závazné ten útržek kódu? Tady třeba vidím, že chyba byla u `hoteltaxi =, ale mysql hláška mě "varovala" někde mezi near 'pax` = 15,
`starttime` = 2008-08-02 12:00:00,
`hote' at line 3
a to mě zmátlo, měnil jsem pax a startime, ale bez úspěchu.

Jaké části si tedy při mysql varování VŽDY všímat, v tomto případě vidím, že spíše toho co je PŘED prvním apostrofem v hlášce, platí to obecně? A proč se tedy mysql_error() obtěžuje a vypisuje i `starttime` = 2008-08-02 12:00:00,
`hote' ??

A co znamená to at line 3 když kód je někde na řádku 1xxx?

Díky za vysvětlení, bude se to hodit pro příště:-)
nightfish
Profil
Jaké části si tedy při mysql varování VŽDY všímat, v tomto případě vidím, že spíše toho co je PŘED prvním apostrofem v hlášce, platí to obecně?
parser ti ukazuje na místo, na kterém zaznamenal chybu
obvykle se chyba vyskytuje bezprostředně před označeným místem

A proč se tedy mysql_error() obtěžuje a vypisuje i `starttime` = 2008-08-02 12:00:00,
`hote' ??

to je spíš dotaz na tvůrce mysql... ale řekl bych, že se tam vypíše x znaků následujících po místě vzniku chyby...

A co znamená to at line 3 když kód je někde na řádku 1xxx?
řádek s `hoteltaxi` = ... se vyskytuje na řádku 3 dotazu (podívej se na svůj první příspěvek - první řádek dotazu začíná UPDATE..., druhý `surname`)
Marek_k
Profil *
Díky nightfishi :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0