-1

我有一个可以在 phpmyadmin 上正常工作的 sql 查询,但是 php mysql_Query 上的 SQL 语法错误

询问:

   SELECT `_id` INTO @task_id  
   FROM `SepidarSoft_Portal`.`Permission` 
   WHERE `FID`='1' and `GID`='Request' and `Permission`='Client' ;

   INSERT INTO `SepidarSoft_Portal`.`Permission` 
   SET `_id`=@task_id,`CTime`='1362128156',`CUser`='1',`FID`='1',`KFID`='0',`GID`='Request',`KGID`='1',`Permission`='Client',`Expired`='0',`Direction`='1',`Access`='200',`State`='1' 
   ON DUPLICATE KEY UPDATE `CTime`='1362128156',`CUser`='1',`FID`='1',`KFID`='0',`GID`='Request',`KGID`='1',`Permission`='Client',`Expired`='0',`Direction`='1',`Access`='200',`State`='1'

mysql_query 显示此错误

添加您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'INSERT INTO 附近使用的正确语法SepidarSoft_PortalPermissionSET _id=@task_id, CTime='13621' 在第 2 行

有谁知道问题是什么?

4

5 回答 5

2

mysql_query

mysql_query()向与指定链接标识符关联的服务器上当前活动的数据库发送一个唯一查询(不支持多个查询)。

因此单独执行你的语句,这样更安全。

或者,如果您坚持使用mysql_*扩展名,您可以使用mysqli_multi_query()

mysqli_multi_query

执行一个或多个由分号连接的查询。

但你最好切换到PDOmysqli_*扩展。mysql_*已弃用。

于 2013-03-01T09:14:26.443 回答
1

您需要在单独的命令中执行这两个查询。也不要听那些建议你使用的人,mysql_query()因为它已被弃用。请改用mysqli_query()PDO函数。

于 2013-03-01T09:14:59.603 回答
0

您需要在 PHP 中将它们作为 2 个单独的 sql 查询运行。因此,使用 2 条 mysql_query() 语句,您将不再收到错误消息。

此外,您应该考虑升级您的代码以不再使用 mysql_ 语句,因为它们已被弃用,而是使用 mysqli 或 PDO。

于 2013-03-01T09:09:04.070 回答
0

原因如下:

mysql_query() 向与指定链接标识符关联的服务器上当前活动的数据库发送一个唯一查询(不支持多个查询)。

注意:尽量避免 MySQL 扩展,尽量使用 PDO 或prepared statements 代替。

于 2013-03-01T09:09:46.300 回答
0

你必须在下面使用:

INSERT INTO epidarSoft_Portal`.`Permission
         (column1, column2, column3, column4)
     VALUES
         ('" . $val1 . "',  '" . $val2 . "', '" . $val3 . "', '" . $val4 . "')
     ON DUPLICATE KEY UPDATE
         column2='" . $val2 . "',
         column3='" . $val3 . "',
         column4='" . $val4 . "'"
 );
于 2013-03-01T09:22:05.390 回答