Поэтому у меня есть некоторый кодPDO BindValue не работает, но работает с прямой пастой
//passed as function param
$clause[2] = "'2016-09-09' AND '2016-09-09'"
$sql = "SELECT {$columns} FROM `{$table}` WHERE `{$clause[0]}` {$clause[1]} :clause";
$stm = $this->db->prepare($sql);
$stm->bindValue("clause", $clause[2]);
if ($stm->execute()) {
return $stm->fetchAll(PDO::FETCH_OBJ);
}
d
//echo'd $sql
SELECT * FROM `deliveries` WHERE `delivery-date` BETWEEN :clause
Если я заменю :clause
в $sql
с сырым входом, '2016-09-09' AND '2016-09-09'
то он работает отлично. Как только я попытаюсь связать его с помощью:: или с помощью ?
, тогда он терпит неудачу. Я не знаю, что с этим делать :(Спасибо за помощь!
Знаете ли вы разницу между ** выражением ** и ** значением **? Вы можете привязывать только значения. Ничего больше. Нет имен таблиц, нет имен столбцов, нет произвольно построенного динамического SQL. Это так тривиально, что это путает людей. Идея заключается в том, что вы обеспечиваете хороший SQL, который работает, тогда вы говорите MySQL «эй, здесь я хочу значения», тогда вы помещаете хорошие заполнители в форме ': param_name', а MySQL обязывает, обрабатывает значение как string/int и фиксирует все предмет на диск. Кроме того, знаете ли вы о композиторах и метрических тоннах библиотек, которые помогут вам забыть о том, как это сделать вручную? –
Спасибо за ответы, полностью очищенные сейчас :) никаких выражений, которые я должен был реализовать ха-ха. Спасибо за разъяснения! – MisterQuacker
Ну, я рад, что помог. Теперь пойдите, постройте что-то удивительное :) –