内部联接不能使用php中的mysqli预处理语句

时间:2011-03-23 00:43:57

标签: php mysqli prepared-statement

我似乎无法使用此语句或语句来处理准备好的查询,代码在下面工作正常:

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

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

如果用单引号括起来,占位符?不起作用。在这种情况下,SQL tokenizer将把它作为文字字符串捕获。

将其更改为:

     WHERE t.tag_name = ? ");

答案 1 :(得分:2)

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

WHERE t.tag_name = ?"