PDO bindParam () с подготовленным оператором не работает

Хорошо, это проблема:

Это работает:

$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"; } ?> 

Solutions Collecting From Web of "PDO bindParam () с подготовленным оператором не работает"

Используя 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"; }