Php mysql错误:sql语法错误

Php mysql错误:sql语法错误,php,mysql,Php,Mysql,我想在来自wikipedia页面的数据库中插入一些文本行(段落)。但是当我尝试在db中插入数据时,mysql显示了这个错误: “您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用near大写字母的正确语法。”有人能帮我解决此问题吗。。 以下是我到目前为止所做的 <?php $loc=$_POST["new"]; $url1 ="https://en.wikipedia.org/w/api.php?format=json&action=qu

我想在来自wikipedia页面的数据库中插入一些文本行(段落)。但是当我尝试在db中插入数据时,mysql显示了这个错误: “您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用near大写字母的正确语法。”有人能帮我解决此问题吗。。 以下是我到目前为止所做的

 <?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);
    ?>

没有解释为什么它会起作用

您有3个字段和2个值

不能纠正他们的错误

是的

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

这不是我的密码。我正在修改OPs代码,我不想从头开始编写。另外,我猜,您忘了提到mysql函数从5.5开始就被弃用了

此外,尽管代码是SQL可注入的这一事实值得一提,但在我看来,这并不是一个实际的答案。这充其量只是一个评论。“嘿,顺便问一下,你知道你拼错了一个词吗?”或者类似的话。编辑上的吹毛求疵。如果问题要作为SQL注入问题的副本关闭,那么这里80%的问题必须作为副本关闭

如果OPs想了解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);
?>

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

... VALUES ('Giant's Capital',
语法突出显示应该指出这是一个问题的原因:)

在输入之前,使用类似于:
mysql\u real\u escape\u string()
的方法来转义您的
$\u POST
数据

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

3个字段,但只有2个值。如果id是auto inc,只需在
$sql=
之前将其保留为outno echo,以及一个也会导致您的错误sql注入漏洞的sql注入漏洞?如何修复它@Dagon yes id是自动递增的。这就是为什么“这就是为什么”我做错了?没有解释为什么它应该工作,没有修复错误,使用过时的代码,并且对SQL注入非常开放。感谢@johncode提供建设性的反馈。我编辑了我的答案,我希望这能满足您的期望;使用$loc=mysql\u real\u escape\u字符串($\u POST['new'])???是的,这就是我保持变量不变的原因。习惯的力量。将更新答案。