2015-03-08 76 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