Вызов подготовить с MySQL не будет получать данные - PullRequest
0 голосов
/ 02 апреля 2012
$data = $mysqli->prepare("SELECT amount FROM items WHERE id=:id");
echo 'forward1';
if(!$data->execute(array(':id' => $id)))
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Losing my mind'.$row->amount);

Это будет отображать только «forward1», а не «error executing ...» или «2».Он работает с * $ mysqli-> query ". Если я добавлю в запросе кавычки '' к: id, будет выведено" forward1error executing ".

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Сначала убедитесь, что вы понимаете синтаксис подготовленных операторов и рабочую модель.

Как в:

$data = $mysqli->prepare("SELECT amount FROM items WHERE id=(?)");
            // THIS ^^ actually "prepares" an object to be used in the statement
$data->bind_param("i",$id)
            // ...then you "bind" the parameter for your statement as "i"(nteger)
echo 'forward1';
if(!$data->execute())  // And now you simply run it, with no other args
    die("error executing".$data->error);
echo '2';
$row = $data->fetch_object();
die('Loosing my mind'.$row->amount);

Я предлагаю использовать что-то более похожее на

$data->execute() or die("error executing".$data->error);

Основными этапами подготовленного заявления являются: 1. Подготовьте запрос с некоторыми значениями-заполнителями; 2. «Привязать» необходимое количество значений к запросу; 3. Выполните это!

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

О, и .. веселись! : -)

0 голосов
/ 02 апреля 2012

Включите ваши сообщения об ошибках.

Вы получаете фатальную ошибку, обращаясь к методу execute в своем операторе mysqli :: после неудачной подготовки.Проверьте, если $data === false, прежде чем звонить execute.

Сообщение об ошибке: 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 ':id' at line 1

Смотрите этот ответ, чтобы узнать, почему эта ошибка вызвана: MYSQLI :: prepare (), ошибка при использовании заполнителя: что-то

См. руководство PHP о том, как использовать mysqli, или используйте вместо него PDO .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...