错误:绑定变量的数量与标记的数量不匹配

问题描述 投票:0回答:3

我只想在数据库(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();
    }

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
3个回答
15
投票

问题出在算术上

我们来数一下代币:

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

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

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

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


12
投票

您似乎在这里做了太多的复制/粘贴:

$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
条款加倍。


0
投票

由 wynikiem różnicy 和 deklarowanych zmiennych 准备十个问题,并准备 ich definiowaniu bindValue。

英文简写: 计数:准备语句中的xxx!=bindValue's

$a=$pdo->prepare("INSERT INTO `abc` (`id`, `one`, `two`, `three`) VALUES (NULL, :add_one, :add_two, :add_three)");
$a->bindValue(':add_one', $one, PDO::PARAM_STR);
$a->bindValue(':add_three', $three, PDO::PARAM_STR);

没有:两个声明

© www.soinside.com 2019 - 2024. All rights reserved.