Ваш код не может работать, потому что вы вызываете метод execute
на объекте PDO
. PDOStatement
содержит метод execute
, поэтому я предполагаю, что вы потеряли что-то во всём скопировании. Вместо того, чтобы отвечать на ваш вопрос, я покажу вам правильный способ делать то, что используют большинство людей.
1) Создать объект PDO и установите его в режим исключения
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try
{
$dbh = new PDO($dsn, $user, $password);
$dbh>setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}
2) Подготовка заявления, начать транзакцию, значения связывания, выполнить
try
{
// Prepare the insert for student table
$student = $dbh->prepare("INSERT INTO `student` (`first_name`, `last_name`, `level`) VALUES (?, ?, ?)");
// Prepare the insert for student_dep table
$student_dep = $dbh->prepare("INSERT INTO `student_dep` (`stdnt_id`, `dep_id`) VALUES (?, ?)");
// Start the transaction
$dbh->beginTransaction();
// Create the record in student table
$student->execute(['Zac', 'Mark', 2]);
// Create the record ind student_dep table using the last insert id generated by previous insert
$student_dep->execute([$dbh->lastInsertId(), 2]);
// Commit both inserts
$dbh->commit();
}
catch(PDOException $e)
{
// If there was an active transaction, roll back
if($dbh->inTransaction())
{
$dbh->rollBack();
}
}
Если что-то пойдет юг в любой точке, вы получите исключение. В пределах исключения вы делаете то, что вам нужно, например, отчетность, откат, очистка и т. Д. И это правильный способ выполнить эти действия.
Помимо того, что вы абсолютно не ошибетесь, почему вы даже что-то получили? '$ db' является экземпляром« PDO », поэтому - он не может иметь метод« execute() ». Вы хотите исправить это, чтобы правильно работать с PDO или вы хотите продолжать использовать свой собственный метод? –
@NB, '$ db' является объектом класса соединения PDO и выполнить() и запрос() методы, которые я объявляемые в этом классе –