内部联接不适用于 php 中的 mysqli 准备语句

发布于 2024-10-26 06:43:29 字数 905 浏览 3 评论 0原文

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

$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();

有人可以帮忙吗?

I can't seem to get this statement or statements alike to work with prepared queries, the code works just fine below:

$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();

but when I change t.tag_name = '?' it gives me an error that the amount of parameters do not match. This is the statement that does not work.

$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();

Can anyone please help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过潦 2024-11-02 06:43:29

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

将其更改为:

     WHERE t.tag_name = ? ");

The placeholder ? does not work if enclosed in single quotes. In this case the SQL tokenizer will catch it as literal string.

Change it to:

     WHERE t.tag_name = ? ");
耀眼的星火 2024-11-02 06:43:29

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

WHERE t.tag_name = ?"

When using placeholders, do you need to use quotes? Most placeholder languages I've used don't.

WHERE t.tag_name = ?"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文