更改表添加主键时PHP返回错误

更改表添加主键时PHP返回错误,php,mysql,primary-key,mariadb,Php,Mysql,Primary Key,Mariadb,10.1.15-MariaDB,PHP 5.4 使用的代码: $table = 'abc'; mysql_query("ALTER TABLE `$table` ADD PRIMARY KEY (`col`)"); 错误: 您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 在桌子旁边 我已尝试输入'PRIMARY'键并删除所有反引号,但没有效果 更新: 它与任何扩展都没有任何关系,使用mysqli_uuu测试了相同的错误。但是,在不同的服务器环境中使

10.1.15-MariaDB,PHP 5.4

使用的代码:

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

您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 在桌子旁边

我已尝试输入'PRIMARY'键并删除所有反引号,但没有效果

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


我已经尝试过这个代码,它对我很有效

$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);        
}

您有权限修改该表吗?

我已经尝试了此代码,它对我有效

$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);        
}

您有权限修改该表吗?

这里有一个与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);
} 

这里有一个与mysqli的快速连接

$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);
} 

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

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

魔鬼是\xef\xbb\xb


这是因为我必须处理多种语言。不过,我希望大家能给我一些建议,告诉我今后如何避免犯这种愚蠢的错误。

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

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

魔鬼是\xef\xbb\xb



这是因为我必须处理多种语言。不过,我确实希望能给我一些建议,告诉我今后如何避免此类愚蠢的错误。

您确定还没有设置主键吗?如果是这样的话,您需要先删除它。@colburton这一点很好,但不应该导致语法错误。是的,非常确定这是一个新表,其中包含一些使用“创建表选择自”创建的虚拟内容。我曾尝试过通过命令行复制和粘贴脚本,效果很好。我也尝试过删除主键,添加主键。当然,这可能只是php引擎暗示的事实:您确定还没有设置主键吗?如果是这样的话,您需要先删除它。@colburton这一点很好,但不应该导致语法错误。是的,非常确定这是一个新表,其中包含一些使用“创建表选择自”创建的虚拟内容。我曾经尝试过通过命令行复制和粘贴脚本,它工作得很好。我也尝试过删除主键,添加主键。当然,这可能只是php引擎暗示:和col名称是col?您没有定义其他主键吗?列名正确,并且在运行脚本时尚未分配任何键。你能发布你桌子的结构吗?我现在不在机器旁,但是如果它通过命令行工作,我怀疑这就是问题所在。无论如何,这是一个包含3列的简单测试表,列为INT,不重复。tyam开始怀疑这是@fvu建议的扩展问题,但我以后只能运行一些测试并在此处更新,而col名称是col?您没有定义其他主键吗?列名正确,并且在运行脚本时尚未分配任何键。你能发布你桌子的结构吗?我现在不在机器旁,但是如果它通过命令行工作,我怀疑这就是问题所在。无论如何,这是一个包含3列的简单测试表,列为INT,不重复。tyam开始怀疑这是@fvu建议的扩展问题,但我以后只能运行一些测试并更新MySQL。该扩展在PHP5.5.0中被弃用,在PHP7.0.0中被删除。相反,应该使用MySQLi或PDO_MySQL扩展。另请参见MySQL:选择API指南和相关FAQ以了解更多信息。对自己的答案发表评论有点奇怪。。。另外,将两个答案合并为一个会更好。切换到mysqli如何神奇地使sql工作?如果在旧的mysql_*函数下失败,它在mysqli中也会失败。mysql此扩展在PHP5.5.0中被弃用,在PHP7.0.0中被删除。相反,应该使用MySQLi或PDO_MySQL扩展。另请参见MySQL:选择API指南和相关FAQ以了解更多信息。对自己的答案发表评论有点奇怪。。。另外,将两个答案合并为一个会更好。切换到mysqli如何神奇地使sql工作?如果在旧的mysql_*函数下失败,那么在mysqli中也会失败。