带有准备好的语句的 PDO bindParam() 不起作用

2021-12-26 00:00:00 php mysql pdo

好的,这就是问题所在:

这有效:

$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();

我到底做错了什么?它甚至不抛出异常

谢谢大家!

另外,这是完整的代码

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 = 空;echo "Todo salió bien";} catch (PDOException $e) {echo "错误";}?>

解决方案

使用 bindParam() 变量是 绑定为引用.

字符串不能通过引用传递.>

可以通过引用传递以下内容:

<块引用>

变量,即 foo($a)

新语句,即 foo(new foobar())

从函数返回的引用

尝试使用 bindValue()

$STH->bindValue(':id', '1', PDO::PARAM_STR);

Ok, this is the problem:

This works:

$STH = $DBH->prepare("SELECT * FROM juegos WHERE id = 1");
$STH->execute();

This doesn't:

$STH = $DBH->prepare("SELECT * FROM juegos WHERE id = :id");
$STH->bindParam(':id', '1', PDO::PARAM_STR);
$STH->execute();

What in the world am I doing wrong? It doesn't even throw an exception

Thank you everyone!

Also, this is the whole code

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

?>

解决方案

Using bindParam() the variable is bound as a reference.

A string can't be passed by reference.

The following things can be passed by reference:

Variables, i.e. foo($a)

New statements, i.e. foo(new foobar())

References returned from functions

Try using bindValue()

$STH->bindValue(':id', '1', PDO::PARAM_STR);

相关文章