Ошибка: количество связанных переменных не соответствует количеству токенов

Я хочу сделать вставку, только если в базе данных нет соответствия (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();
}

Где ВЫБРАТЬ

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

Можете ли вы объяснить мне, где вина?

1

Решение

Ошибка в арифметике

Давайте посчитаем токены:

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

Теперь давайте посчитаем количество связанных переменных:

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

4, очевидно, не равно двум. Это проблема

6

Другие решения

Кажется, вы сделали слишком много копирования / вставки здесь:

$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 пункт удвоился.

9

По вопросам рекламы [email protected]