Хорошо, это проблема:
Это работает:
$STH = $DBH->prepare("SELECT * FROM juegos WHERE id = 1"); $STH->execute();
Это не означает:
$STH = $DBH->prepare("SELECT * FROM juegos WHERE id = :id"); $STH->bindParam(':id', '1', PDO::PARAM_STR); $STH->execute();
Что в мире я делаю неправильно? Он даже не выбрасывает исключение
Всем спасибо!
Кроме того, это весь код
<?php try { $DBH = new PDO("everything is", "ok", "here"); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $STH = $DBH->prepare("SELECT * FROM juegos WHERE id = :id"); $STH->bindParam(':id', '1', PDO::PARAM_STR); $STH->execute(); $STH->setFetchMode(PDO::FETCH_ASSOC); while($row = $STH->fetch()) { echo $row['nombre']."<br/>"; } $DBH = null; echo "Todo salió bien"; } catch (PDOException $e) { echo "Error"; } ?>
Используя bindParam()
переменная привязана как ссылка .
Строку нельзя передать по ссылке .
Следующие вещи могут быть переданы по ссылке:
Переменные, т.е. foo ($ a)
Новые утверждения, т.е. foo (new foobar ())
Ссылки, возвращаемые функциями
Попробуйте использовать bindValue()
$STH->bindValue(':id', '1', PDO::PARAM_STR);
Значение для параметра :tabla
будет автоматически указано и экранировано PDO. Выполненный запрос будет выглядеть следующим образом:
SELECT * FROM 'juegos'
который недействителен SQL.
PHP BinParam()
переменную PHP к соответствующему заполнителю имени или вопроса в выражении SQL, который использовался для подготовки инструкции.
Правильный способ использования bindParam:
$id = 1; $sth = $DBH->prepare("SELECT * FROM juegos WHERE id = :id"); $sth->bindParam(':id', $id, PDO::PARAM_INT);// use bindParam to bind the variable :id //represents the variable $id //is the variable being represented by ':id', PDO::PARAM_INT //states that the value of the variable $id should be a string
PHP BindValue()
значение к соответствующему заполнителю имени или вопроса в выражении SQL, который использовался для подготовки оператора.
$id=10; $name=roadkill; $sth = $dbh->prepare('SELECT * FROM juegos WHERE id < :id AND name = :name'); $sth->bindValue(':id', $id, PDO::PARAM_INT);// use bindValue to bind the variable's value $sth->bindValue(':name', $name, PDO::PARAM_STR);// use bindValue to bind the variable's value
Ключевое различие между этими двумя методами заключается в том, что в отличие от PDOStatement::bindValue()
, с bindParam()
переменная привязана как ссылка и будет оцениваться только в момент PDOStatement::execute()
.
не передавайте значение непосредственно BindParam.
try { // $DBH = new PDO("everything is", "ok", "here"); $DBH = new PDO("mysql:host=localhost;dbname=test", 'root', ''); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $STH = $DBH->prepare("SELECT * FROM statstracker WHERE SrNo = :id"); $id = 1; // here you should keep it as variable and pass it to param $STH->bindParam(':id', $id, PDO::PARAM_STR); $STH->execute(); $STH->setFetchMode(PDO::FETCH_ASSOC); while($row = $STH->fetch()) { echo $row['SrNo']."<br/>"; } $DBH = null; echo "Todo salió bien"; } catch (PDOException $e) { echo "Error"; }