【发布时间】:2009-09-17 15:48:32
【问题描述】:
以下代码块工作正常(没有错误)
$query = "select * from users where username = ?";
$statement = $sql->prepare($query);
echo gettype($statement); // -- This returns 'object'
$statement->bindParam(1, $username);
以下给出: 致命错误:在第 39 行的 /file.php 中的非对象上调用成员函数 bindParam()
$email = 'fake@email.com';
$query = "select * from users where email = ?";
$statement = $sql->prepare($query);
echo gettype($statement); // -- this returns 'boolean'
$statement->bindParam(1, $email); // -- this is line 39.
现在这很奇怪。
在我的本地机器和远程主机上,这从来都不是问题。
此错误仅出现在我本月试用的这家新托管公司上。他们编译php时会不会是配置参数?
--------编辑-------- 在试图找出问题所在的同时,我发现了这一点。
$query = "select userID, username from users";
$statement = $sql->prepare($query);
$statement->execute();
$r = $statement->fetchAll(PDO::FETCH_ASSOC);
// display # of rows
echo "Rows returned: " . $statement->rowCount();
// display results array
echo '<pre>'; print_r($r); echo '</pre>';
在服务器上,我得到
Rows returned: 4
Array
(
[0] => Array
(
[userID] => 1
[username] => lyrae
)
[1] => Array
(
[userID] => 2
[username] => jproffer
)
[2] => Array
(
[userID] => 3
[username] => king
)
[3] => Array
(
[userID] => 4
[username] => gergy
)
)
这是正确的。说返回 4 行并显示结果数组。然而,在另一台服务器上,我得到了
Rows returned: 0
Array
(
[0] => Array
(
[userID] => 1
[username] => lyrae
)
[1] => Array
(
[userID] => 2
[username] => jproffer
)
[2] => Array
(
[userID] => 3
[username] => king
)
[3] => Array
(
[userID] => 4
[username] => gergy
)
)
因此,PDOStatement::rowCount() 似乎也不能在一个服务器上工作,但在另一个服务器上工作。
【问题讨论】:
-
查询失败后有没有试过检查
$sql->errorInfo()?很多时候它会直接指出问题所在。 -
你是在 bindparam 之前还是之后调用的?