| Autor | Zpráva | ||
|---|---|---|---|
| Marek_k Profil * |
#1 · Zasláno: 2. 8. 2008, 13:24:31
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 * |
#2 · Zasláno: 2. 8. 2008, 13:34:45
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 * |
#3 · Zasláno: 3. 8. 2008, 16:33:55
Za hoteltaxi nemáte zpětný apostrof.
|
||
| Marek_k Profil * |
#4 · Zasláno: 4. 8. 2008, 09:02:04
Jste bůh, díky. :-)
|
||
| Marek_k Profil * |
#5 · Zasláno: 4. 8. 2008, 09:09:25
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 |
#6 · Zasláno: 4. 8. 2008, 09:18:04
„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 * |
#7 · Zasláno: 4. 8. 2008, 09:25:45
Díky nightfishi :-)
|
||
|
Časová prodleva: 17 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0