如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]

Posted

技术标签:

【中文标题】如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]【英文标题】:How to use multiple inner joins along with multiple WHERE clause in mysqli prepared starement? [duplicate] 【发布时间】:2016-10-06 19:06:10 【问题描述】:

我正在尝试编写一个查询,我想使用基于第一个连接条件的 WHERE 子句和基于第二个连接的第二个 WHERE 子句进行选择。我已经写了几种方法,但总是显示错误:

Fatal error: Call to a member function bind_param() on boolean in /var/www/html/connections.php on line 80

$user_id 正在从其他地方获取。所以没有问题,如果我在这里运行一个单一的连接,它工作正常。

这是我的查询:

方法一:

$sql = $db->prepare("SELECT r.* from registered_users r 
        inner join connections c2 on r.id = c2.uid
        inner join connections c on r.id = c.connections_userid where c2.connections_userid = ? or c.uid = ?");

$sql->bind_param("ii",$user_id,$user_id);           
$sql->execute();

方法二:

$sql = $db->prepare("SELECT r.* from registered_users r 
        inner join connections c2 on r.id = c2.uid where     c2.connections_userid = ?
        inner join connections c on r.id = c.connections_userid where c.uid = ?");

$sql->bind_param("ii",$user_id,$user_id);           
$sql->execute();

【问题讨论】:

我已经尝试了这里的一切,它似乎不适合我。 【参考方案1】:

你的准备有错误,所以检查一下

$sql = $db->prepare("SELECT r.* from registered_users r 
    inner join connections c2 on r.id = c2.uid
    inner join connections c on r.id = c.connections_userid where c2.connections_userid = ? or c.uid = ?");

if (!$sql) 
   //error !! Let's report it!
   trigger_error($db->error);


$sql->bind_param("ii",$user_id,$user_id);           
$sql->execute();

【讨论】:

注意:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以了解在 'inner join connections c on r.id = c.connections_userid where c.uid = ?' 附近使用的正确语法在第 81 行 /var/www/html/connections.php 中的第 3 行 好了,现在不是更有帮助吗?如果您仍然无法找出错误所在,请发布一个新问题,包括您的表架构。 我知道我需要在这个语句之后使用错误日志记录,但是我在为错误准备好的语句语法上苦苦挣扎,就像在这个 trigger_error($db->e​​rror) 中一样。那真的很有帮助。它还让我想到了使用 UNION 运算符而不是用这种愚蠢的方式编写它。再次感谢:) 我也赞成你的回答,但我想它现在不会出现,或者自从我重新加入后就不会出现 很高兴听到这个消息!我认为您仍然可以通过单击复选标记来接受答案。

以上是关于如何在 mysqli 准备语句中使用多个内部连接和多个 WHERE 子句? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

多个 MySQLi 准备语句和漏洞(评价我的代码)

2个准备好的语句,2个存储过程,1个mysqli连接

mysqli:它可以在一个语句中准备多个查询吗?

mysqli:它可以在一个语句中准备多个查询吗?

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

如何在 MySQLI 中使用准备好的语句?