Portál AbcLinuxu, 7. května 2025 17:15
try { $sql = 'INSERT INTO `users` (id, mail, pass, name) VALUES (:id, :mail, :pass, :name)'; $stmt = $pdo->prepare($sql); $stmt->execute(array(':id' => null, ':mail' => 'foo@bar.ltd', ':pass' => 'secret', ':name' => 'ja' ); } catch (PDOException $e) { echo $e->getMessage(); }
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONBez toho výjimky nefungují. Máš tam zbytečný sloupec
id
.
$sql = 'INSERT INTO `users` (mail, pass, name) VALUES (:mail, :pass, :name)';
Možná sis nezapnulNemám to přesně jako ty ale mám to nastaveno taktoPDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTIONBez toho výjimky nefungují.
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Máš tam zbytečný sloupec id
.
proč? sloupec id opravdu v db mám $sql = 'INSERT INTO `users` (`id`, `mail`, `pass`, `name`) VALUES (:`id`, :`mail`, :`pass`, :`name`)';nebo tohle
$sql = 'INSERT INTO `users` (`id`, `mail`, `pass`, `name`) VALUES (?, ?, ?, ?)';Díky
$stmt->execute
. Když jsem ji doplnil, tak mi to funguje.
Jak jsi založil tabulku?
Stejně mi není jasné, proč ti to nevyhazuje chybu na chybějící pravou závorku při volání $stmt->execute
. Když jsem ji doplnil, tak mi to funguje.
To byl jenom úklep při vkládání kódu..
Jak jsi založil tabulku?Jak to myslíš?
Jakým SQL dotazem. Mně ten příklad funguje, tobě ne. To znamená, že se nejspíš naše tabulky nějak liší. Založil jsem ji takto:Jak jsi založil tabulku?Jak to myslíš?
CREATE TABLE users(id integer primary key auto_increment, mail varchar(255), pass varchar(24), name varchar(24));
$array = array('mail' => 'foo@bar.ltd', 'pass' => 'secret', 'name' => 'ja'); $sql = 'INSERT INTO `users` ('.$array.') VALUES ('.$array.')'; $stmt = $pdo->prepare($sql); $stmt->execute($array);
$data = array('mail' => 'foo@bar.ltd', 'pass' => 'secret', 'name' => 'ja'); $sql = "INSERT INTO `users` (" . implode(', ', array_keys($data)) . ") VALUES (" . implode(', ', array_fill(0, sizeof($data), "?")) . ")"; $stmt = $pdo->prepare($sql); $stmt->execute(array_values($data));ale nepoužívám to.
function save($pdo, $table, $columns) { $before = false; $after = false; $array = array(); foreach ($columns as $key => $value) { if(end($array) == $key) { $before .= "`$key`"; $after .= ":`$key`"; } else { $before .= "`$key`,"; $after .= ":`$key`,"; } $array[] = "$key => $value"; } $sql = "INSERT INTO `$table` ($before) VALUES ($after)"; $stmt = $pdo->prepare($sql); $stmt->execute($array); }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.