Diskuze: Uncaught exception
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
zdar,
ohraničuje ten wrapper sloupce do zpětných apostrofů? Pokud ne, zřejmě ti tam koliduje nějaký sloupec s klíčovým slovem (např. 'text).
Wrapper na vkládání dělá toto:
public static function vloz($tabulka, $parametry = array()) {
return self::dotaz("INSERT INTO `$tabulka` (`".
implode('`, `', array_keys($parametry)).
"`) VALUES (".str_repeat('?,', sizeOf($parametry))."?)",
array_values($parametry));
}
Zkusím si tam pohrát s apostrofy
Zkus si vypsat, co obsahuje pole $clanek (třeba v metodě ulozClanek)
No, tam někde bude zakopanej pes. vrací to totiž prázdný pole a za boha
mi ho nejde nijak naplnit..
Zkouším už i takový věci v kontroleru:
if($_POST)
{
$_SESSION['clanek']=$clanek=array(
'ID_clanek'=>$_POST['ID_clanek'],
'nadpis'=>$_POST['nadpis'],
'anotace'=>$_POST['anotace'],
'text'=>$_POST['text'],
'autor'=>$_POST['autor'],
'datum_vlozeni'=>'1',
'url'=>'FEF',
'active'=>0
);
$klice = array( 'nadpis','anotace','text','autor', 'datum_vlozeni','url', 'active');
$clanek = array_intersect_key($_POST, array_flip($klice));
$spravceClanku->ulozClanek($_SESSION['clanek']['ID_clanek'],$clanek);
$this->pridejZpravu('Článek přidán!');
$this->presmeruj('clanky');
}
Už to načítá alespoň z formuláře, byla tam chyba že jsem u inputů neměl "name" ale jen "id" a proto to nic nebralo Teď ještě vyřešit tu stejnou chybu co na začátku
Te´d je pro změnu takováto chyba:
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1' in /data/www/19227/teplostyl_cz/admin/modely/Db.php:50 Stack trace: #0 /data/www/19227/teplostyl_cz/admin/modely/Db.php(50): PDO->prepare('INSERT INTO `cl...') #1 /data/www/19227/teplostyl_cz/admin/modely/Db.php(60): Db::dotaz('INSERT INTO `cl...', Array) #2 /data/www/19227/teplostyl_cz/admin/modely/SpravceClanku.php(22): Db::vloz('clanky', Array) #3 /data/www/19227/teplostyl_cz/admin/kontrolery/ClankyKontroler.php(53): SpravceClanku->ulozClanek('', Array) #4 /data/www/19227/teplostyl_cz/admin/kontrolery/SmerovacKontroler.php(50): ClankyKontroler->zpracuj(Array) #5 /data/www/19227/teplostyl_cz/admin/index.php(26): SmerovacKontroler->zpracuj(Array) #6 {main} thrown in /data/www/19227/teplostyl_cz/admin/modely/Db.php on line 50
máš tam někde v SQL dotazu chybu u nějaké závorky
umí wrapper ten dotaz vypsat?
Vymazal jsem ty zpětné apostrofy, na té databázi klienta co to běží se
právě moc nemají ty apostrofy používat. Jenže teď jsem chtěl jen doladit
editaci, ale i tam to háže chybu, zase tam asi bude problém ve wrapperu.
Chyba:
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= ? WHERE ID_clanek = ?' at line 1' in /data/www/19227/teplostyl_cz/admin/modely/Db.php:50 Stack trace: #0 /data/www/19227/teplostyl_cz/admin/modely/Db.php(50): PDO->prepare('UPDATE clanky S...') #1 /data/www/19227/teplostyl_cz/admin/modely/Db.php(69): Db::dotaz('UPDATE clanky S...', Array, '3') #2 /data/www/19227/teplostyl_cz/admin/modely/SpravceClanku.php(24): Db::zmen('clanky', Array, 'WHERE ID_clanek...', '3') #3 /data/www/19227/teplostyl_cz/admin/kontrolery/ClankyKontroler.php(53): SpravceClanku->ulozClanek('3', Array) #4 /data/www/19227/teplostyl_cz/admin/kontrolery/SmerovacKontroler.php(50): ClankyKontroler->zpracuj(Array) #5 /data/www/19227/teplostyl_cz/admin/index.php(26): SmerovacKontroler->zpracuj(Array) #6 {main} thrown in /data/www/19227/teplostyl_cz/admin/modely/Db.php on line 50
wrapper s funkcí pro editaci:
public static function zmen($tabulka, $hodnoty = array(), $podminka, $parametry = array()) {
return self::dotaz("UPDATE $tabulka SET ".
implode(' = ?, ', array_keys($hodnoty)).
" = ? " . $podminka. ";",
array_merge(array_values($hodnoty)), $parametry);
}
No a co ti vypíše ta část
echo "UPDATE $tabulka SET ".
implode(' = ?, ', array_keys($hodnoty)).
" = ? " . $podminka. ";"
?
Už to nakonec všechno běží.. Teď zpětně po pár hodinách nevím, čím to přesně bylo, ale musel jsem promazat nějaké apostrofy ve wrapperu
Díky za předešlou pomoc!
Zobrazeno 11 zpráv z 11.