2015-03-08 53 views
0

我想插入一些文本(段落)在数据库中来自维基百科页面..但是当我尝试插入数据在数据库中显示此错误: “你在您的SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以找到在首都附近使用的正确语法。谁能帮我解决这个问题.. 这是我迄今所做的......mysql错误:在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`(`id`, `name`, `text`) VALUES ('$loc', '$des');"; 
    mysql_query($sql) or die(mysql_error()); 
    echo "1 record added"; 
    mysql_close($con); 
    ?> 
+2

3个字段但只有2个值。如果id是auto inc,只是将其忽略掉 – 2015-03-08 19:44:40

+0

在'$ sql ='之前没有回声... ... – 2015-03-08 19:45:25

+0

还有一个SQL注入漏洞,也导致你的错误 – 2015-03-08 19:45:28

回答

0

理想情况下,你应该输入到数据库中之前逃跑的数据。你有被撇号结束于'$loc' SQL查询的问题,以便查询竟写着:

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

语法高亮应该说明为什么这是一个问题:)

使用类似:mysql_real_escape_string()逃避你$_POST数据输入前。

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

表示替换 $ loc = $ _ POST [“new”]; 与 $ loc = mysql_real_escape_string($ _ POST ['new']); ??? – 2015-03-08 19:59:08

+0

是的,这只是我保持变量相同。习惯的力量。将更新答案。 – redreddington 2015-03-08 20:22:15

0

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

你有3个领域, 2值。

不解决他们的错误

是的,它的作用。

使用过时的代码,并且是SQL注入

敞开这不是我的代码。我正在调整OP代码,我不想从头开始编写代码。另外,我想,你忘了提及mysql函数已被弃用,因为5.5

此外,尽管代码是SQL注入的事实很好,但在我看来这并不构成实际答案。这是最好的评论。即。 “嘿btw你知道你拼错了一个字吗?”或者其他一些。编辑挑剔。如果问题将作为SQL注入问题的重复而被关闭,那么这里80%的问题将不得不被封闭。

如果有机磷农药想知道关于SQL注入,请参阅本site

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

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

没有解释*为什么它应该工作,不能解决它们的错误,使用过时的代码,并且对SQL注入非常开放。 – 2015-03-08 19:47:46

+0

谢谢@JohnConde为你提供建设性的反馈。我编辑了我的答案,我希望这能满足你的期望。 – 2015-03-09 15:42:40