我想在数据库中插入一些来自维基百科页面的文本(段落)。但是当我尝试在数据库中插入数据时,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);
?>