MySQL 错误:SQL 语法中的错误


mysql error :error in sql syntax

我想在数据库中插入一些来自维基百科页面的文本(段落)。但是当我尝试在数据库中插入数据时,MySQL显示此错误:"您的 SQL 语法有误;检查与您的MySQL服务器版本相对应的手册,了解在首都附近使用的正确语法。 谁能帮我解决这个问题。这是我到目前为止所做的...

 <?php
    $loc=$_POST["new"];
    $url1 ="https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=".$loc;
    $opf = file_get_contents($url1);
    $data = json_decode($opf, true);
    $titles = array();
    foreach ($data['query']['pages'] as $page) {
    $des = $page['extract'];
    }
    $con = mysql_connect("localhost","root","");
    if (!$con) { 
    die('Could not connect: ' . mysql_error());
     } 
    mysql_select_db("location", $con);
    $url = "http://upload.wikimedia.org/wikipedia";
    echo $sql="INSERT INTO `search`(`id`, `name`, `text`) VALUES ('$loc', '$des');";
    mysql_query($sql) or die(mysql_error()); 
    echo "1 record added";
    mysql_close($con);
    ?>

理想情况下,您应该在将数据输入数据库之前对其进行转义。您遇到的问题是撇号正在结束 SQL 查询'$loc'因此查询实际上读取:

... VALUES ('Giant's Capital',

语法突出显示应指示为什么这是一个问题:)

使用类似以下内容:mysql_real_escape_string()在输入之前转义$_POST数据。

$loc = mysql_real_escape_string($_POST['new']);

没有解释为什么它应该工作

您有 3 个字段和 2 个值。

无法修复他们的错误

是的,确实如此。

使用过时的代码,并且对SQL注入开放

这不是我的代码。我正在改编 OPs 代码,我不是要从头开始编写它。另外,我想,您忘了提到mysql函数自5.5以来已弃用

此外,尽管代码是SQL可注入的事实值得一提,但在我看来,它并不构成实际答案。这充其量只是一个评论。即。"嘿,顺便说一句,你知道你拼错了一个单词吗?"或诸如此类。社论吹毛求疵。如果问题要作为SQL注入问题的重复项关闭,那么这里80%的问题将不得不作为欺骗者关闭。

如果OP想了解SQL注入,请参考这个网站

哦,顺便说一句,这是代码:

<?php
$loc=$_POST["new"];
$url1 ="https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&explaintext=&titles=".$loc;
$opf = file_get_contents($url1);
$data = json_decode($opf, true);
$titles = array();
foreach ($data['query']['pages'] as $page) {
$des = $page['extract'];
}
$con = mysql_connect("localhost","root","");
if (!$con) { 
die('Could not connect: ' . mysql_error());
 } 
mysql_select_db("location", $con);
$url = "http://upload.wikimedia.org/wikipedia";
echo $sql="INSERT INTO `search`(`name`, `text`) VALUES ('$loc', '$des');";
mysql_query($sql) or die(mysql_error()); 
echo "1 record added";
mysql_close($con);
?>