错误:绑定变量数与令牌数不匹配

Ale*_*nte 1 php pdo rowcount

我想只在db(mySQL)中没有对应的情况下才进行插入,但他不是声明.这是片段

    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();
    }
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

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

Sir*_*rko 12

看来你在这里做了一点太多的复制/粘贴:

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

应该只是

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

您已将该WHERE条款翻倍.


You*_*nse 9

错误在于算术

我们算一下代币:

 SELECT * FROM contatti WHERE nome = ? // one
                       AND cognome = ? // two
                        WHERE nome = ? // three
                       AND cognome = ? // four
Run Code Online (Sandbox Code Playgroud)

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

array($_POST['nome'], // one
      $_POST['cognome']) // two
Run Code Online (Sandbox Code Playgroud)

4显然不等于2.那就是问题所在

  • 用户名检查出来 (3认同)