2012-01-11 93 views
-3

我一直在試圖讓下面的查詢權的語法,但它不斷生成語法錯誤PHP語法錯誤

代碼示例

$_SESSION['FN'] = "FirstName"; 
$_SESSION['LN'] = "LastName"; 
$_SESSION['Code'] = 1; 
$strSql = "INSERT INTO BookingInformation (FirstName,LastName,Code) VALUES("'.$_SESSION['FN'].'","'.$_SESSION['LN'].'",'.$_SESSION['Code'].')"; 

我想要存儲的字符串和整數值,但插入聲明生成語法

+0

你有什麼用'$ _SESSION'變量在做什麼? – Jakub 2012-01-11 14:07:03

+0

您的代碼易受sql注入攻擊。 http://xkcd.com/327/ – piddl0r 2012-01-11 14:12:28

+0

@ piddl0r這取決於變量值的來源。 – Gumbo 2012-01-11 14:19:23

回答

0

這句話是壞, 正確的形式是:

/* i don't need this!!! 
    $_SESSION['FN'] = "FirstName"; 
    $_SESSION['LN'] = "LastName"; 
    $_SESSION['Code'] = 1; 
*/ 
    $strSql = "INSERT INTO BookingInformation (FirstName) VALUES("'.$_SESSION['FN'].'")"; 

o如果表BookingInformation的字段是例如名字,姓氏和代碼,您可以插入 :

$strSql = "INSERT INTO BookingInformation (FirstName,LastName,Code) VALUES("'.$_SESSION['FN'].'","'.$_SESSION['LN'].'",'.$_SESSION['Code'].')"; 

如果你有一些空值,你可以這樣做:

$strSql = "INSERT INTO BookingInformation VALUES("'.$_SESSION['FN'].'",'','')"; 
3

你引用是錯誤的,如

VALUES("' 

VALUES('" 
0

嘗試這樣的:

$strSql = "INSERT INTO BookingInformation (FirstName, LastName, Code) VALUES('" . $_SESSION['FN'] . "', '" . $_SESSION['LN']. "','" . $_SESSION['Code'] . "')"; 

而且你的代碼是vulnrable到SQL Injection

+0

會話變量通常在服務器端由會話密鑰保存在客戶端cookie中。 – Emyr 2012-01-11 14:08:50

+0

永不假定某事是安全的使用;-) – matino 2012-01-11 14:11:08

+0

錯誤:解析錯誤:語法錯誤,意外的T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING在/hermes/web08/b978/pow.habtoorfootballcom/htdocs/alfarooqcentre.com/Bookings/test .php on line 7 – Learning 2012-01-11 14:11:49

0

的問題是'是的「」請嘗試以下方法中:

$strSql = "INSERT INTO BookingInformation (FirstName) VALUES ('".$_SESSION['FN']."', '".$_SESSION['LN']."', '".$_SESSION['Code']."')"; 

您還試圖插入3個值成一排,不能像上面來完成,它應該是(僞代碼):

INSERT INTO table (column1, column2, column3) VALUES ($data1, $data2, $data3); 

或者你的情況:

$strSql = "INSERT INTO BookingInformation (FirstName, LastName, Code) VALUES ('".$_SESSION['FN']."', '".$_SESSION['LN']."', '".$_SESSION['Code']."')"; 

最後你的代碼似乎是不安全因爲會話可能被篡改,更好地用準備好的查詢確保所有輸入或mysql_real_escape_string()

0

嘗試

$strSql = "INSERT INTO BookingInformation (FirstName, LastName, Code) VALUES('".$_SESSION['FN']."', '".$_SESSION['LN']."', '".$_SESSION['Code']."')";

+0

Code field是Integer'「。$ _ SESSION ['Code']。''我仍然必須編寫查詢,因爲它是 – Learning 2012-01-11 14:14:01

+0

然後,您可以使用它沒有雙引號。 – mustafa 2012-01-11 14:18:36

+0

非常重要的一點是你應該做輸入驗證。這行代碼假定你確定這些變量沒有什麼不愉快的地方。 SQL注入是一種非常常見的攻擊方式。 – mustafa 2012-01-11 14:20:29