【问题标题】:Error: number of bound variables does not match number of tokens错误:绑定变量的数量与标记的数量不匹配
【发布时间】:2013-04-19 15:44:28
【问题描述】:

我只想在 db (mySQL) 中没有对应关系的情况下进行插入,但他让我不是语句。这是sn-p

    if ($sql->rowCount() > 0) {
        echo 'Non inserisci';
    } else {
        echo 'Inserisci';
        $db->beginTransaction();
        echo 'Ciao3';
        $sql = $db->prepare("INSERT INTO contatti (nome,cognome) VALUES (?,?)") or die('Ciao2');
        echo 'Ciao4';
        $sql->execute(array($_POST['nome'],$_POST['cognome']));
        echo 'Ciao5';
        $db->rollBack();
    }

SELECT 在哪里

    $db->beginTransaction();
    $sql = $db->prepare("SELECT * FROM contatti WHERE nome = ? AND cognome = ? WHERE nome = ? AND cognome = ?") or die ('Ciao1');
    $sql->execute(array($_POST['nome'],$_POST['cognome']));
    $db->rollBack();

你能解释一下错在哪里吗?

【问题讨论】:

  • 尝试计算令牌数

标签: php pdo rowcount


【解决方案1】:

错误在于算术

让我们数一下令牌:

 SELECT * FROM contatti WHERE nome = ? // one
                       AND cognome = ? // two
                        WHERE nome = ? // three
                       AND cognome = ? // four

现在让我们计算绑定变量的数量:

array($_POST['nome'], // one
      $_POST['cognome']) // two

4 显然不等于 2。这就是问题

【讨论】:

  • 好的...但我还是不能插入。如果我在 IF 之外做声明,它会做。 rowCount 的意思不是和 $mysqli->affected_rows 一样吗?谢谢
  • 潜在错误出现在第二个 WHERE 子句中。
  • 用户名签出
【解决方案2】:

看来您在这里复制/粘贴的内容有点过多:

$sql = $db->prepare("SELECT * FROM contatti WHERE nome = ? AND cognome = ? WHERE nome = ? AND cognome = ?") or die ('Ciao1');

应该只是

$sql = $db->prepare("SELECT * FROM contatti WHERE nome = ? AND cognome = ?") or die ('Ciao1');

你已经把WHERE 子句加倍了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多