SQL错误仅发生在PHP脚本中[重复]
Posted
技术标签:
【中文标题】SQL错误仅发生在PHP脚本中[重复]【英文标题】:SQL error only occurs in PHP script [duplicate] 【发布时间】:2014-09-13 00:44:51 【问题描述】:我很矛盾。我的 SQL 查询只会通过 phpMyAdmin 发送。如果我尝试通过 PHP 发送此特定查询,则会收到错误消息。当我将该确切的查询复制到 PhpMyAdmin 时,它会顺利通过。
INSERT INTO posts (id, content, poster, timestamp, tags) VALUES ('12056242', 'OMG I just got a #toyota', 'Clunker5', '09/12/14 08:43:36', 'toyota');INSERT INTO `tags` (tag, posts) VALUES ('toyota', 1) ON DUPLICATE KEY UPDATE posts=posts+1; UPDATE `tags` SET posts=posts+1 WHERE tag IN ('toyota');
这是与问题相关的 PHP 代码
//Ups one post for all tags entered by the user
if(!empty($tags))
$tags1 = explode(",", $tags);
$tags_submit = join("','", $tags1);
$tags_insert = join("', 1), ('", $tags1);
$sql = "INSERT INTO posts (id, content, poster, timestamp, tags) VALUES ('$d', '$b', '".$_SESSION['username']."', '$c', '$tags');"
. "INSERT INTO `tags` (tag, posts) VALUES ('".$tags_insert."', 1)
ON DUPLICATE KEY UPDATE posts=posts+1;
UPDATE `tags` SET posts=posts+1 WHERE tag IN ('".$tags_submit."');";
$result = mysql_query($sql);
else
$sql = "INSERT INTO posts (id, content, poster, timestamp, tags) VALUES ('$d', '$b', '".$_SESSION['username']."', '$c', '$tags');";
$result = mysql_query($sql);
$error = mysql_error();
if($result)
echo "1";
else
echo error($sql, $error, "Tags: ".$tags, "Post: ".$b, "ID: ".$d);
错误是
SQL Response: 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 'INSERT INTO `tags` (tag, posts) VALUES ('toyota', 1), ('ohmygoodness', 1) ' at line 1.
编辑:现在我知道我不能进行多重查询,我该如何进行这个查询?
INSERT INTO `tags` (tag, posts) VALUES ('".$tags_insert."', 1)
ON DUPLICATE KEY UPDATE posts=posts+1;
UPDATE `tags` SET posts=posts+1 WHERE tag IN ('".$tags_submit."');
【问题讨论】:
你得到什么错误?你在检查 mysql_error() 吗?插入变量后,您是否确保查询正确? 今天第三个类似的问题。INSERT INTO tags (tag, posts) VALUES ('toyota', 1), ('ohmygoodness', 1)
- 我从来没有见过像这样的VALUES
子句,它怎么会起作用?
如果你想一次插入多行,你可以这样做,INSERT INTO table
(var1
, var2
) VALUES (row1_1
, row1_2
), (row2_1
, row2_2
) 试试看,效果很好
那个查询是有效的,问题是你要提供多个查询,听从比尔的建议,只需在单独的 mysql_query 调用中查询每个查询,无论如何你不应该使用 mysql_*,为什么不使用 mysqli_。更好的 api 或 PDO
【参考方案1】:
您尝试在一次调用该 API 函数时执行多个语句,但 mysql_query()
不支持多查询。
无论如何,您都不应该使用多重查询。你可能会接触到一整堂SQL injection vulnerabilties。
您应该单独执行每个 SQL 语句,分别调用 mysql_query()
。
另外,@JohnConde 的评论是恰当的:您应该始终检查来自mysql_query()
的返回值,因为如果出现错误,它会返回 false。如果发生这种情况,请登录或报告mysql_error()
,以了解更多关于问题所在。
【讨论】:
【参考方案2】:来自the mysql_query
documentation:
不支持多个查询。
因此,您不能发送由;
分隔的多个语句。
【讨论】:
【参考方案3】:我今天遇到了同样的问题,我有 2 个很好的答案。每次有SQL语句都需要使用mysql_query;这是一个更好的说明,例如,如果您有
"INSERT INTO query";
"INSERT INTO 2nd query";
mysql_query(process both query "INSERT INTO query";
this isn't going to work, it'll only work in phpmyadmin or
in straight mysql command line sql. not in a php script.
you'll need to:
"INSERT INTO query";
mysql_query(process one query); //you should also use mysql_error() to see the response
"INSERT INTO 2nd query";
mysql_query(process 2nd query);
它将需要在 2 个单独的 mysql 查询中形成。它是 php 端的一项安全功能,可防止 sql 注入。不管出于什么原因,它就是这样。
【讨论】:
以上是关于SQL错误仅发生在PHP脚本中[重复]的主要内容,如果未能解决你的问题,请参考以下文章