2015-06-25 3 views
0

У меня есть набор переменных в верхней части моего PHP:Передача переменной в качестве имени столбца в запросе выборки

$abc = "paid"; 

Теперь мне нужно передать его ниже запроса в качестве имени столбца. Я попробовал ниже, но это не сработало.

$sql = "SELECT customerID FROM payments WHERE :myVar = :credit"; 
$stmt = $connect->prepare($sql); 
$stmt->execute(array(':credit'=>"0", ':myVar'=>$abc)); 

Как передать $abc на запросе на выборку в качестве имени столбца?

+0

Что посмотреть, когда вы делаете 'эхо $ SQL ; ' –

+0

@AbhikChakraborty спасибо. 'SELECT customerID FROM payments WHERE: colName =: credit'. Но когда я заменю $ abc значением, он возвращает правильные значения. Обратите внимание, что я просто сделал небольшое редактирование. – Becky

+0

@Saty Это не сработает. См. [Этот вопрос] (http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-parameter). – Hexaholic

ответ

0

Фигурные brakets (от PHP docs):

комплекс (фигурный) Синтаксис

Это называется сложным не потому, что синтаксис является сложным, а потому, что она позволяет использовать сложные выражения.

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

Ваш код должен что-то вроде: "SELECT customerID FROM payments WHERE {$abc} = :credit";

+0

спасибо. Прекрасно работает :) Но я немного смущен после прочтения комментария @Hexaholic. Есть идеи? – Becky

+0

@Hexaholic comment означает, что вы не можете связывать имена столбцов, как в '$ stmt-> execute (array (': credit' =>" 0 ", ': $ abc' => $ abc));'. Но это решение будет работать, так как мой downvoted один è_é ... – n00dl3

-2

вы не можете связать ColName/имя таблицы в подготовленных запросов, вы могли бы сделать так:

$sql = "SELECT customerID FROM payments WHERE $abc=:credit"; 
$stmt = $connect->prepare($sql); 
$stmt->execute(array(':credit'=>"0")); 
+0

Почему это проголосовали? – n00dl3

+0

Пожалуйста, по крайней мере, оставьте комментарий, когда вы спускаете вниз ... Я не понимаю! – n00dl3

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