【发布时间】:2020-05-29 17:37:52
【问题描述】:
我正在尝试编写一个查询来插入/更新一个表,这是我第一次使用准备好的语句,我收到了错误 SQLSTATE[HY093]: Invalid parameter number 但据我所知,我正在传递所有列/值必填。
(我试图在不使用 bindParam 的情况下执行此操作,如示例 #2 here)
目前这只是一个测试,我计划在查询实际运行后将其变为动态。
$data_test = [
':event_id' => 3354,
':event' => 'TESTESTEST',
':staff_booking_id' => 27255,
':is_read' => 'yes',
':priority' => 'medium'
];
$q = "INSERT INTO events(event_id, event, staff_booking_id, is_read, priority)
VALUES(:event_id, :event, :staff_booking_id, :is_read, :priority)
ON DUPLICATE KEY UPDATE event_id = LAST_INSERT_ID(:event_id), event = :event, staff_booking_id = :staff_booking_id, is_read = :is_read, priority = :priority;";
$result = $this->db->prepare($q);
$result = $result->execute($data_test);
【问题讨论】:
-
@FunkFortyNiner 我见过两次使用同一个占位符的问题,这可能取决于您的驱动程序是否支持它。仿真可能会解决问题。
-
@tadman 这就是我的意思,谢谢。
-
@tadman(和亚当)。我找到了the duplicate 并关闭了问题。这就是我之前的意思。我用谷歌搜索了正确的词。
-
@FunkFortyNiner 我已经阅读并添加了
PDO::ATTR_EMULATE_PREPARES => true,,但我现在收到错误SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'event = 'TESTESTEST', staff_booking_id = '27255', is_read = 'yes', priority = 'm' at line 3我看不出有任何问题,有什么想法吗? -
是的,因为
EVENT是mysql的保留字。要么将其重命名为未保留的名称,要么在其周围使用刻度。
标签: php mysql pdo prepared-statement on-duplicate-key