Переменная $stmt
не является объектом PDOStatement
. Это логическое значение (в данном случае false
).
Ваш INSERT
оператор недействителен. Вместо этого попробуйте следующее (отсутствует OR
):
$costumers = 'INSERT OR IGNORE INTO costumers(first_name, last_name, age)
VALUES(:first_name, :last_name, :age)';
Вы можете использовать методы PDO::errorInfo
и PDO::errorCode
для получения дополнительной информации.
$costumers = 'INSERT OR IGNORE INTO costumers(first_name,last_name,age)
VALUES(:first_name,:last_name,:age)';
$stmt = $this->pdo->prepare($costumers);
if ($stmt === false) {
echo $this->pdo->errorCode().': '.$this->pdo->errorInfo();
}
Вы также используете $firstName
и $lastName
перед init:
function insertCostumers() {
$costumers = 'INSERT OR IGNORE INTO costumers(first_name, last_name, age)
VALUES(:first_name, :last_name, :age)';
$stmt = $this->pdo->prepare($costumers);
$data = [['firstName' => 'Hans',
'lastName' => 'Meier',
'age' => 32],
['firstName' => 'Anna',
'lastName' => 'Mueller',
'age' => 35],
['firstName' => 'Steffi',
'lastName' => 'Gygax',
'age' => 67]];
foreach ($data as $d) {
$firstName = $d['firstName'];
$lastName = $d['lastName'];
$age = $d['age'];
$stmt->bindParam(':first_name', $firstName, PDO::PARAM_STR);
$stmt->bindParam(':last_name', $lastName, PDO::PARAM_STR);
$stmt->bindParam(':age', $age, PDO::PARAM_INT);
$stmt->execute();
}
}
Чтобы убедиться, что комбинация first_name
и last_name
уникальна, вам нужно добавить ограничение UNIQUE
к вашей таблице costumers
. Используйте следующий оператор CREATE TABLE
:
CREATE TABLE IF NOT EXISTS costumers (
costumer_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
age INTEGER NOT NULL,
UNIQUE (first_name, last_name)
);
Вы можете увидеть разницу с и без ограничения UNIQUE
в следующей демонстрации:
http://sqlfiddle.com/#!7/79b1c/1/1