2015-12-28 84 views
-1

我有這個mysql查詢:PHP MySQL查詢PHP的解析錯誤

$sql = "INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks, 
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis, 
economie, aardrijkskunde, ANW, godsdienst) 
VALUES(\$_POST["naam"]\,\$_POST["niveau"]\,\$_POST["nederlands"]\,\$_POST["duits"]\,\$_POST["frans"]\,\$_POST["grieks"],\$_POST["engels"]\,\$_POST["latijn"]\,\$_POST["spaans"]\,\$_POST["wiskunde"]\,\$_POST["natuurkunde"]\,\$_POST["scheikunde"]\,\$_POST["geschiedenis"]\,\$_POST["economie"]\,\$_POST["aardrijkskunde"]\,\$_POST["ANW"]\,\$_POST["godsdienst"]\)"; 

它發送到數據庫使用此功能:

function connectDB($sql) { 
$DBcon = mysql_connect(host, user, pass) or die(mysql_error()); 
mysql_select_db(database); 
$result = mysql_query($query) or die(mysql_error()); 
mysql_close($DBcon); 
return $result; 

但是,當我嘗試運行它,它給了我一個PHP解析錯誤:

PHP Parse error: syntax error, unexpected 'naam' (T_STRING) in /media/usbdisk/website/www/boeken/naardb.php on line 11 

有人能告訴我我犯了什麼錯誤嗎?我已經嘗試了很多方法來放置查詢,但沒有一個能夠工作。

+0

查找MySQL的語法:https://dev.mysql.com/doc /refman/5.0/en/insert。html –

+2

構建SQL查詢時,您犯了許多錯誤。研究使用準備好的語句。它不僅更安全,而且會渲染你正在創建的字符串連接問題。 – David

+0

你試圖逃避的引號不存在。但是,如上所述,甚至不打擾修復使用參數化查詢。當前的代碼將對SQL注入開放。 'naam'錯誤是因爲'''在PHP中關閉了'$ sql'變量的字符串封裝。 – chris85

回答

0

有幾個錯誤,但我會從這個問題開始。

unexpected 'naam' (T_STRING)... 

是由於PHP不期望有字符串而引起的。你正在逃避部分查詢,但你只需要連接$ _POST變量。

我勸職位變量設置爲自己的變量來簡化您的查詢,像這樣的答案概括格式化查詢:Using php variables inside MySQL insert statement

IE:$naam = $_POST["naam"];等等

最大的問題是,您使用的是過時的方法,你應該使用PDO(編寫)查詢

PHP deprecated methods.

你一定要考慮使用PDO和準備你的聲明。

爲PDO一對夫婦的快速參考:

祝你好運!

0

嘗試Concat的查詢中的變量是這樣的:

"INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks, 
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis, 
economie, aardrijkskunde, ANW, godsdienst) 
VALUES(" 
.mysql_escape_string($_POST['naam']). 
")"; 

和閱讀有關sql injections了。

@meda回答是如何使用PDO創建SQL調用的正確示例。

1
  1. 你不應該建立像這樣的查詢。
  2. 這不是你如何逃生值
  3. mysql_ is deprecated,你應該使用prepared statements

Example in PDO

$sql = "INSERT INTO lijsten(naam, niveau, nederlands, duits, frans, grieks, 
engels, latijn, spaans, wiskunde, natuurkunde, scheikunde, geschiedenis, 
economie, aardrijkskunde, ANW, godsdienst) 
VALUES(:naam,:niveau .......)"; 

if($stmt = $pdo->prepare($sql)){ 
    $stmt->bindValue(:naam, $_POST["naam"]); 
    ..... 
    $stmt->execute(); 
} 
+0

我完全同意,但只是顯示使用PDO而沒有鏈接到文檔或tut並不是那麼有用當男人(或女孩)顯然是一個noob ... – Jacques

+0

@Jacques對不起,我不得不做一些事情,我更新了我的文章 – meda

+0

Upvoted爲編輯:) – Jacques