【问题标题】:PHP return error when Alter Table Add Primary Key更改表添加主键时 PHP 返回错误
【发布时间】:2016-07-12 20:18:38
【问题描述】:

10.1.15-MariaDB,PHP 5.4

使用的代码:

   $table = 'abc';
   mysql_query("ALTER TABLE `$table` ADD PRIMARY KEY (`col`)");

错误:

您的 SQL 语法有错误;检查手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 靠近 \'ALTER TABLE...

我尝试了 KEY `PRIMARY` 并删除了所有反引号,但无济于事。

更新: 它与任何扩展无关,用 mysqli_ 相同的错误进行测试。但是,在不同的服务器环境中使用相同的脚本重复测试是可以的。

【问题讨论】:

  • 您确定还没有设置主键吗?如果是这样,您需要先删除它。
  • @colburton 好点,但这不应该导致 syntax 错误。
  • 是的,非常确定它是一个新表,其中包含一些使用 create table select from 创建的虚拟内容。我曾尝试通过命令行复制和粘贴脚本并且它工作正常。
  • 我也试过删除主键,添加主键
  • 当然可能只是 php 引擎暗示mysql_ extension has been deprecated for quite a while now :)

标签: php mysql primary-key mariadb


【解决方案1】:

我已经尝试过这段代码,它对我有用

$table = 'abc';

$query="ALTER TABLE `".$table."` ADD PRIMARY KEY(`col`);";

/* Execute query */
$result=$mysqli->query($query);
/* Verify results */
if(!$result) {
  $ErrMessage  =  "Error : " $mysqli->error . "\n";
  $mysqli->close();
  die($ErrMessage);        
}

你有修改表的权限吗?

【讨论】:

  • col 名称是 col ?并且您没有定义其他主键?
  • 列名正确,运行脚本时尚未分配键。泰。
  • 你能把你的表的结构贴出来吗?
  • 我现在远离机器,但如果它通过命令行工作,我怀疑这就是问题所在。无论如何,它是一个简单的 3 列测试表,col 是 INT 且不重复。 ty
  • 我开始怀疑这是@fvu 建议的扩展问题,但我只能稍后运行一些测试并在此处更新
【解决方案2】:

这里是 mysqli 的 quik 连接

$mysqli =  new mysqli($db_host, $db_user, $db_pass,$database); 

if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  die ("<h1>can't use database !</h1>");
exit();
 }
/* change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("error loding 'character set utf8' : %s\n", $mysqli->error);
} 

【讨论】:

  • Mysql 这个扩展在 PHP 5.5.0 中被弃用,在 PHP 7.0.0 中被移除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关常见问题以了解更多信息。
  • 评论自己的答案有点奇怪……另外,将两个答案合二为一会好很多。
  • 切换到mysqli如何神奇地使sql工作?如果它在旧的 mysql_*() 函数下失败,它也会在 mysqli 中失败。
【解决方案3】:

首先,感谢大家的帮助。将脚本复制并粘贴到显示大量错误描述的不同服务器环境后,我得到了答案。

在 '\xef\xbb\xbfALTER TABLE abc ADD PRIMARY KEY 附近使用正确的语法

魔鬼是\xef\xbb\xb

发生这种情况是因为我必须处理多种语言。不过,我确实希望给我一些建议,让我知道如何在以后避免这种愚蠢的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    相关资源
    最近更新 更多