2013-01-23 38 views
0

我不能为我的生活得到绑定与PDO查询一起工作,他们总是返回false。PDO:绑定问题,所有查询返回false

在此示例中,它检查字段的值是否在2个其他值之间。

这工作:

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

UPDATE:上面的查询现在工作感谢帮助。以下依然没有。

我一直在这里通过各种PDO文章拖网,但我还没有找到解决方案,我不知道还有什么要尝试。

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

基本上,在functions.php的例子功能:

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

main.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?

+0

啊,我已经忘记了第一个准备。第二个是,但它准备失败,所以我不觉得需要显示bindParam。我用整个查询更新了它。 – Adam

+0

我已经确认了它,如果我使用常规包含而不是包含那么它正常工作的功能。那么如何通过函数传输$ db变量?我知道我可以使用全局$ db;在函数中,但有没有办法使每个函数都成为全局的? – Adam

回答

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(); 
} 
+0

谢谢,我忘了准备。现在这个工作,但不是其他。 – Adam

+0

@亚当我更新了我的答案。 –

+0

它给我致命错误:在第31行调用/customers/b/3/c/tempus.li/httpd.www/theme/registration.php中的非对象的成员函数setAttribute()。这意味着$数据库返回false,我已经更新了我原来的问题,我认为可能会发生。 – Adam