Заявление PDO ничего не делает? - PullRequest
2 голосов
/ 10 августа 2009
$columns = "name, address, city, state, zip";
$values = "'$name', '$address', '$city', '$state', '$zip'";
$query = "insert into customer values ($values)";
$statement = $dbh->prepare($query);
$statement->execute();

Так что я совершенно новичок в этом. Примеры детских садов и детские разговоры не будут обидными! :)

Форма выполняется без результата и без ошибок.

Ответы [ 2 ]

4 голосов
/ 10 августа 2009

Попробуй это. (есть много способов сделать это)

$sql = "INSERT INTO customer (name,address,city,state,zip) VALUES (:name,:address,:city:,state,:zip)";

$sth = $dbh->prepare($sql);
$sth->execute(array(
     ':name' => $name, 
     ':address' => $address, 
     ':city' => $city,
     ':state' => $state,
     ':zip'   => $zip
));
3 голосов
/ 10 августа 2009

Прежде всего, вы совершенно не поняли заявления. :)

Вот как это должно быть сделано:

$query = "insert into customer (name, address, city, state, zip) values (?, ?, ?, ?, ?)";
$statement = $dbh->prepare($query);
$statement->execute(array($name, $address, $city, $state, $zip));

Как вы, без сомнения, можете видеть себя, вы даже не использовали свою переменную $columns в своем примере. Это должно быть частью запроса.

Ваша вторая ошибка заключалась в том, что вы пытались интерполировать переменные данных непосредственно в строку. Весь смысл подготовленных заявлений состоит в том, чтобы этого избежать. Вместо этого вы используете заполнители (в данном случае символ?). PDO будет заменять фактические переменные в том же порядке, в каком вы их предоставляете. Это делается путем отправки их в PDO в качестве параметра оператора execute с использованием массива.

Это намного превосходит старый метод построения полного запроса в виде строки, поскольку он устраняет все риски безопасности. Уязвимости, вызванные построением запроса так, как вы это сделали, очень реальны и, вероятно, являются самой распространенной дырой в безопасности в Интернете. Попробуйте поискать «SQL-инъекцию», если хотите узнать больше.

Причина, по которой вы не получаете сообщение об ошибке, возможно, заключается в том, что вы не установили механизм сообщения об ошибках. Попробуйте добавить это после подключения:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
...