Php mysql错误:sql语法错误
我想在来自wikipedia页面的数据库中插入一些文本行(段落)。但是当我尝试在db中插入数据时,mysql显示了这个错误: “您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用near大写字母的正确语法。”有人能帮我解决此问题吗。。 以下是我到目前为止所做的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
<?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'])???是的,这就是我保持变量不变的原因。习惯的力量。将更新答案。