Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySqli编写的语句不起作用_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

Php MySqli编写的语句不起作用

Php MySqli编写的语句不起作用,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我编写了一个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); $

我编写了一个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操作后都会进行错误检查,而且它从未打印出错误

有什么想法吗

谢谢


编辑好,这会让事情变得更混乱。我还有另一份准备好的声明正在发挥作用。据我所知,唯一的区别是它访问的是不同的表。我完全不明白这一点:由于MySQL错误,查询无法工作。 密钥是MySQL关键字,必须转义:

$sql = $this->db->prepare("SELECT value FROM usermeta WHERE `key`='points' AND user_id=1");
进一步提示
您可以随时转义字段或让库为您执行任务,以防止此类名称冲突。更常见的示例是option、order、

哦,对不起,我在写问题时没有想到这一点。在我的实际代码中,我在所有代码之前都有一个前缀,但写出来似乎是浪费时间。我将编辑我的问题以反映这一点。此外,我在所有地方都进行了错误检查,但没有一个被绊倒。原始问题中的任何内容都是什么意思?null?我尝试对结果进行var_转储,但它没有输出任何内容。这就是我说它什么也没回报的意思。是的,我刚刚检查过,结果为空。您确认了吗?服务器上确实存在一个user_id=1,key=points的实际行?是的,正如我在原始问题中所说的。如果我使用query执行语句,那么它就会工作,并返回预期的结果。但是,只要我尝试使用一个准备好的语句来执行,结果就是空的。