-1

我一辈子都无法绑定到使用 PDO 查询,它们总是返回 false。

在这个例子中,它检查一个字段的值是否在两个其他值之间。

这有效:

$query = $db->query("SELECT * FROM table WHERE field1 > '$start' AND field1 < '$finish'");

这不会:

$query = $db->query("SELECT * FROM table WHERE field1 > :start AND field1 < :finish");
$query->bindParam(":start", $start);
$query->bindParam(":finish", $finish);

更新:由于帮助,上述查询现在可以工作。下面还是不行。

我一直在这里浏览各种 PDO 帖子,但我没有找到解决方案,我不知道还有什么可以尝试的。

UPDATE2:好的,它似乎没有找到$db,因此没有连接并返回false。$db 连接行位于所有主页所需的 connect.php 文件中。这些页面上的内容由包含相关文件/页面的函数调用。因为PDO在函数中自己不起作用,是不是通过函数丢失了$db来包含包含查询的文件?我可能解释得不够清楚。

基本上,functions.php 中的示例函数:

function getRegistration() {
    include("registration.php");
}

主文件

require_once("connect.php");
require_once("functions.php");

getRegistration();

registration.php 包含:

$sql = $db->prepare("INSERT INTO tempus_members(username, email, password, activation_code, registration_date, registered_ip, name) VALUES(:username, :email, :password, :activation_code, :registration_date, :registered_ip, :name)");
$sql->bindParam(":username", $username);
$sql->bindParam(":email", $email);
$sql->bindParam(":password", $hash);
$sql->bindParam(":activation_code", $activation_code);
$sql->bindParam(":registration_date", $registration_date);
$sql->bindParam(":registered_ip", $registered_ip);
$sql->bindParam(":name", $name);
$sql->execute();

是否通过包含页面的函数丢失了 $db 变量?如果是这样,我如何通过所有功能携带 $db ?

4

1 回答 1

3

尝试:

$stmt = $db->prepare("SELECT * FROM table WHERE field1 > :start AND field1 < :finish");
$stmt->bindParam(":start", $start);
$stmt->bindParam(":finish", $finish);
$stmt->execute();

您使用的是PDO::query而不是PDO::prepare

至于其他查询,您要返回什么错误?试试下面的代码,看看是否有任何错误被吐到页面上:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try{
    $sql = $db->prepare("INSERT INTO tempus_members(username, email, password, activation_code, registration_date, registered_ip, name) VALUES(:username, :email, :password, :activation_code, :registration_date, :registered_ip, :name)");

    $sql->bindParam(":username", $username);
    $sql->bindParam(":email", $email);
    $sql->bindParam(":password", $hash);
    $sql->bindParam(":activation_code", $activation_code);
    $sql->bindParam(":registration_date", $registration_date);
    $sql->bindParam(":registered_ip", $registered_ip);
    $sql->bindParam(":name", $name);

    $sql->execute();

}
catch(PDOException $e){
    echo $e->getMessage();
}
于 2013-01-23T15:56:36.627 回答