php - MySQL/MariaDB 事务访问冲突 1064

标签 php mysql pdo mariadb mysql-error-1064

我在交易查询方面遇到了一些问题。我有2张 table , “科目”和链接表称为“导师科目”。我使用的是 MariaDB 版本 10.0.21。我创建了以下查询,但不断收到“语法错误或访问冲突:1064”错误。

public function addSubject($values){        

    try {
        $temp = $this->db->query("
        BEGIN;
        INSERT INTO subjects
        (subject_code, subject_name, subject_grade, subject_description, subject_category)
        VALUES (:subject_code, :subject_name, :subject_grade, :subject_description, :subject_category);

        SET @last_id = LAST_INSERT_ID();

        INSERT INTO tutorsubject
        (tutor_id , subject_id)
        VALUES (:tutor_id, @last_id);
        COMMIT;",$values);
        return $temp;
    } catch (DBException $e) {
        echo "Error:<br/>" . $e->getMessage();
        return null;
    } catch (Exception $e) {
        echo "Error:<br/>" . $e->getMessage();
        return null;
    }
}

以下是解析到查询的值

$array = array("subject_code" => $code,
    "subject_name" => $subject_name,
    "subject_grade" => $grade,
    "subject_description" => $subject_description,
    "subject_category" => $subject_category, 
    "tutor_id"=>$selecttutor);

我收到以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''reach'.'subjects' ('subject_code', 'subject_name', 'subject_grade', 'subject_de' at line 1 Raw SQL : INSERT INTO 'reach'.'subjects' ('subject_code', 'subject_name', 'subject_grade', 'subject_description', 'subject_category') VALUES (:subject_code,:subject_name,:subject_grade,:subject_description,:subject_category);

我的问题是,当我在 phpMyAdmin 中运行此查询时,它会毫无问题地完成。我正在使用 PDO MySQL 类,发现 here作为我的数据库交互的基础。我开始认为该类可能不直接支持事务?

如有任何想法,我们将不胜感激。

最佳答案

尝试让 PHP 完成工作 + 使用 PDO 事务方法,值部分未经过测试,因此您需要确保其正确:

$this->db->beginTransaction();

$this->db->query("INSERT INTO subjects
(subject_code, subject_name, subject_grade, subject_description, subject_category)
VALUES (:subject_code, :subject_name, :subject_grade, :subject_description, :subject_category)", $values);

$values['last_id'] = $this->db->lastInsertId();

if (empty($values['last_id'])) {
    $this->db->rollBack();
} else {
    $this->db->query("INSERT INTO tutorsubject
    (tutor_id , subject_id)
    VALUES (:tutor_id, :last_id)", $values);

    $this->db->commit();
}

关于php - MySQL/MariaDB 事务访问冲突 1064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335938/

相关文章:

php - 为什么 float 在 laravel dompdf 中不起作用?

c# - NHibernate/MySQL 字符串连接

php - 如何使用 PHP 将对象转换为字符串

php - 插入前检查数据库中是否存在行

php - 获取空查询

php - 警告 : sizeof(): Parameter must be an array or an object that implements Countable

php - 为 WooCommerce 中的特定订单状态启用 "cancel"订单操作按钮

php - Javascript 删除正则表达式分隔符

PHP MySQL 获取锁

php - PDO: Assets 和 session 未正确显示