我编写了一个PHP类,它在我的开发机器上按预期运行,但是当我将它上传到我的服务器时,它不起作用。经过大量的修补,我发现了一些我无法解释的东西。
基本上,这不起作用,它绝不会返回任何内容:
$sql = $this->db->prepare("SELECT sh_value FROM sh_usermeta WHERE sh_key='points' AND sh_user_id=1");
$sql->execute();
$sql->bind_result($res);
$sql->fetch();
$sql->close();
但是,这确实会返回预期值:
$result = $this->db->query("SELECT sh_value FROM sh_usermeta WHERE sh_key='points' AND sh_user_id=1");
$result->fetch_object();
因此,语句是相同的,但由于某种原因,它只有在我使用“query()”时才有效。就像一个注释,我的第一个代码块是一个简化的例子(我已经验证不起作用)。我想使用预准备语句,因为在其他一些情况下我希望能够绑定参数,例如用户名。
同样,准备好的语句适用于我的开发环境,但在我的服务器上(PHP版本:5.2.17,MySql版本:5.0.51a)它没有。
另外,为了澄清,我在每次sql操作后都进行了错误检查,并且从未打印过错误。
有什么想法吗?
谢谢!
编辑好的,这会让事情更加困惑。我有另一份准备好的陈述,即IS工作。据我所知,唯一的区别是它正在访问另一个表。我根本不明白这一点:S
答案 0 :(得分:0)
由于MySQL错误,查询无效。
key
是MySQL关键字(docs),必须进行转义:
$sql = $this->db->prepare("SELECT value FROM usermeta WHERE `key`='points' AND user_id=1");
您可以随时转义字段(或让图书馆为您完成工作)以防止此类名称冲突(更常见的示例包括option
,order
,...)