【问题标题】:Insert Ignore into not working is giving error in phpInsert Ignore into not working 在 php 中给出错误
【发布时间】:2018-02-20 20:35:38
【问题描述】:

所以,我有一个 php 脚本,我在其中从数据源获取数据并将其保存到数组中,然后使用 php 将数组值插入到我的 psql 服务器中。

问题是我不希望我的数据库中有任何重复项,因为我会不断更新我的表。于是我查了一下,发现IGNORE INTO是为了避免重复,但是php会抛出一个错误。

此外,由于我的表中没有任何主键,是否仍然可以实现这一点。

我的错误代码:

PHP Fatal error:  Uncaught Exception: Error attempting to query: PDOException: SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near "IGNORE"

我的 php 脚本在 psql 服务器中插入数据

$psql = $stm->pdo_prepared("Insert IGNORE INTO student(student_id,student_email,student_message,student_marks)VALUES".implode(',',$arry1());

提前致谢。

【问题讨论】:

  • 没有 PK 的表只是一个糟糕的开始......主键上的唯一性约束可以解决问题
  • INSERT IGNORE 没有主键或唯一约束就毫无意义。
  • 如果你不告诉你的数据库重复是什么,它应该如何防止插入它们?此外,如果您要说遇到错误,请始终在问题中包含错误。
  • 好的,我会在我的数据库中做一个pk。但我很困惑,当我运行我的脚本时,php 在 IGNORE 上抛出了一个语法错误。你们认为那是因为如果我的桌子上没有 pk
  • pdo_prepared() 是自定义函数吗?它不是原生函数,也不是我所知道的任何框架使用的函数。

标签: php psql


【解决方案1】:

请发布错误,但我相信您可能会遇到语法错误。您还需要大括号中的值和一些可能导致语法错误的空格。

$psql = $stm->pdo_prepared("INSERT IGNORE INTO student (student_id,student_email,student_message,student_marks) VALUES (".implode(',',$arry1()) . ")";

我还建议执行以下操作。您可以在此处查看更多信息:

http://php.net/manual/en/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT IGNORE INTO student (student_id, student_email, student_message, student_marks) VALUES (:student_id, :student_email, :student_message, :student_marks)");
$stmt->bindParam(':student_id', $student_id);
$stmt->bindParam(':student_email', $student_email);
$stmt->bindParam(':student_message', $student_message);
$stmt->bindParam(':student_marks', $student_marks);

【讨论】:

  • 我用一些建议更新了我的答案。您的 SQL 语句中肯定有一些不正确的语法。有些空格不正确,您缺少大括号。请查看我的解决方案之一是否有效并告诉我。
  • 并且还要确保将 student_id 设为主要,否则 IGNORE 将不起作用,正如其他人所提到的那样。
  • 哦好的,谢谢,我做完pk后运行脚本再评论。
  • 知道为什么错误消息说错误在IGNORE附近吗?
  • 我认为有时会在返回查看语句的最后一个有效部分时出现。我发布的内容有用吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-05
  • 2011-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多