【问题标题】:inner join wont work with mysqli prepared statement in php内部连接不适用于 php 中的 mysqli 准备语句
【发布时间】:2011-03-23 00:43:57
【问题描述】:

我似乎无法让这个或类似的语句与准备好的查询一起工作,代码在下面工作得很好:

$DBH = getDBH();
    $stmt = $DBH->prepare("SELECT a.id, a.title, a.photo FROM tag t INNER JOIN tag_reference atx ON t.tag_id = atx.tag_id
        INNER JOIN articles a
            ON atx.article_id = a.id
    WHERE t.tag_name = 'example'");
    $stmt->execute();
    $stmt->bind_result($id,$title,$photo);
    $stmt->fetch();

但是当我更改t.tag_name = '?' 时,它会给我一个错误,即参数数量不匹配。这是行不通的语句。

$DBH = getDBH();
    $stmt = $DBH->prepare("SELECT a.id, a.title, a.photo FROM tag t INNER JOIN tag_reference atx ON t.tag_id = atx.tag_id
        INNER JOIN articles a
            ON atx.article_id = a.id
    WHERE t.tag_name = '?'");
        $stmt->bind_param('s',$example);
    $stmt->execute();
    $stmt->bind_result($id,$title,$photo);
    $stmt->fetch();

有人可以帮忙吗?

【问题讨论】:

  • 我认为应该是t.tag_name = ?,而不是t.tag_name = '?'
  • 我认为您不需要在 ? 周围加上单引号。

标签: php mysqli prepared-statement


【解决方案1】:

如果用单引号括起来,占位符? 不起作用。在这种情况下,SQL 标记器会将其捕获为文字字符串。

改成:

     WHERE t.tag_name = ? ");

【讨论】:

  • 啊,谢谢,简单的修复,我想我试过了,但我想我没有。
  • 不需要。我只是记得上周我绊倒了同样的事情。 (再次)
【解决方案2】:

在使用占位符时,是否需要使用引号?我用过的大多数占位符语言都没有。

WHERE t.tag_name = ?"

【讨论】:

  • 啊,谢谢,简单的解决方法,我以为我试过了,但我想我没有。
猜你喜欢
  • 2013-03-24
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2016-07-22
  • 1970-01-01
  • 2015-06-26
  • 2011-06-20
相关资源
最近更新 更多