2010-09-02 2 views
0

Так вот кодоблок:PHP - Подготовленные утверждения ошибки, что не так?

 $query = "UPDATE users SET ?=? WHERE ?=?"; 

     $type = "s"; 
     $type .= substr(gettype($valname), 0, 1); 
     $type .= 'i'; 

     if ($smtp = $this->conn->prepare($query)) 
     { 
      $smtp->bind_param($type, $colname, $valname, 'id', 40); 
      $smtp->execute(); 
      $smtp->close(); 

     }else 
     { 
      return $this->conn->error; 

     } 

По какой-то причине отказывается связывать параметры, и это дает мне эту ошибку: У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с?? =? ГДЕ? =? ' в строке 1

Если я добавить кавычку (`) или singlequotes (') вокруг questionmarks я получаю эту ошибку вместо:

Неизвестный столбец"? in 'where clause'

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

Спасибо!

ответ

2

Я не думаю, что вы можете определить столбец динамически в подготовленном операторе, только значения, поскольку они экранированы и т. Д. Вам нужно будет поместить имя столбца в строку запроса $, если оно исходит из неизвестного источника make убедитесь, что вы отфильтровываете его и проверяете.

+0

Ahh, хорошо. Возможно, вы правы, но теперь я получил еще одну ошибку: Неустранимая ошибка: невозможно передать параметр 3 по ссылке в blablbla ...., запрос выглядит следующим образом: «UPDATE users SET $ colname =? WHERE id =?», Выглядит хорошо? Я также удалил имена столбцов из функции bind_param: ($ type, $ valname, 40). – qwerty

+0

Я забыл сказать, что я также исправил параметр $ type. Все еще не работает ... – qwerty

+0

Получил! Я переместил идентификатор в отдельную строку, а затем связал строку в функции. Кажется, работает! :) – qwerty

3

Насколько я знаю, вы можете использовать? заполнители для условия, а не для имен таблиц и полей.

http://php.net/manual/en/pdo.prepared-statements.php

+0

Ах, ладно. Возможно, вы правы, но теперь я получил еще одну ошибку: Неустранимая ошибка: невозможно передать параметр 3 по ссылке в blablbla ...., запрос выглядит следующим образом: «UPDATE users SET $ colname =? WHERE id =?», Выглядит хорошо? Я также удалил имена столбцов из функции bind_param: ($ type, $ valname, 40). – qwerty

+0

Я забыл сказать, что я также зафиксировал параметр $ type. Все еще не работает... – qwerty

Смежные вопросы