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

どこが悪いのか説明してもらえますか?

4

2 に答える 2

13

間違いは算数にある

トークンを数えましょう:

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

バインドされた変数の数を数えましょう:

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

4 は明らかに 2 に等しくありません。それが問題です

于 2013-04-19T15:48:29.890 に答える
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条項が 2 倍になりました。

于 2013-04-19T15:47:50.470 に答える