mysqli prepare返回false但SQL有效

问题描述:

我正在使用mysqli的prepare函数来创建一个查询到我的数据库,但即使我有更多的请求在同一页面上工作,但它失败了。mysqli prepare返回false但SQL有效

我的查询看起来是这样的:

if ($insert = $mysqli->prepare("INSERT INTO table_name (id_user, token) VALUES (?, ?)")) { 
    // Do some cool stuff here 
} else { 
    var_dump($mysqli->error); 
    var_dump($insert->error); 
} 

执行过程中,它进入else和输出是:

string(0) "" //var_dump($mysqli->error); 
Notice: Trying to get property of non-object in // var_dump($insert->error); 

我知道我的$ mysqli的工作,所以我还测试在准备语句中输出这些字符串。他们中没有人工作过乙醚。 (我测试他们在MySQL/phpmyadmin和他们工作正常)

"INSERT INTO `table_name` (`id_user`, `token`) VALUES (?, ?)" 
"INSERT INTO `table_name` (`table_name`.`id_user`, `table_name`.`token`) VALUES (?, ?)" 
'INSERT INTO `table_name` (`id_user`, `token`) VALUES (50, "random_token")' 

有人可以帮助我这个小小的头痛?

感谢

+0

可能是某种连接错误。 – Cfreak

+0

关于'bind_param'的部分在哪里? –

+0

@ Fred-ii-在*“在这里做一些很酷的东西”*部分,我想像 – Phil

错误实际上是抱怨$嵌件没有被定义...这是有道理的,因为它打你else语句。

Notice: Trying to get property of non-object in // var_dump($insert->error); 

请注意您自己评论的错误以及它实际上抱怨的内容。你不应该在else语句中引用$ insert变量

+1

这回答了这个问题,但奇怪的是'$ mysqli-> error'没有显示任何值 – Phil

+0

我知道$ insert没有定义。我相信它没有定义,因为prepare函数返回bool(false)。我想知道的是为什么_prepare_返回false:-S –

我终于明白了。问题是我没有关闭以前的连接。其中之一已经使用相同的名称$插入

我找到了两个可能的修复方法,我找到了一个人可以找到这个线程。

修复1 - 关闭您的连接,它是简单有

$connectionVariable->close(); 

修复2 - 不同的命名变量。尽管您应该始终先执行Fix 1。我想我必须以艰难的方式找到它。

P.S.感谢所有帮助过我的人

+0

您实际需要的唯一修复方法是正确的错误报告。 –