Внутреннее соединение не будет работать с подготовленным MySQL оператором в php - PullRequest
0 голосов
/ 23 марта 2011

Я не могу заставить этот оператор или операторы одинаково работать с подготовленными запросами, код отлично работает ниже:

$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 ]

3 голосов
/ 23 марта 2011

Заполнитель ? не работает, если заключен в одинарные кавычки. В этом случае токенайзер SQL будет ловить его как буквальную строку.

Измените его на:

     WHERE t.tag_name = ? ");
2 голосов
/ 23 марта 2011

При использовании заполнителей нужно ли использовать кавычки? Большинство использованных мной заполнителей не используются.

WHERE t.tag_name = ?"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...