2014-01-13 54 views
0

我收到此錯誤從我更新我的SQL查詢。PHP錯誤「T_ENCAPSED_AND_WHITESPACE,期待T_STRING」

的錯誤是在這條線:

$update_sql = "UPDATE table SET `column1` = IF(LENGTH('$_POST['column1']')=0, column1, '$_POST['column1']'), `column2` = '".$_POST['column2']."' WHERE name='".$_POST['movie_name']."';"; 

的錯誤是:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING 

這有什麼錯我的代碼?

+0

什麼是downvote? –

+0

當你得到像這樣的錯誤時,找到這個錯誤的最簡單方法通常是執行類似於'echo'生成的更新sql:'的操作。 $ update_sql;'。 –

回答

2

錯誤的字符串連接。

$update_sql = "UPDATE movies SET `nowvideo` = IF(LENGTH('" . $_POST['nowvideo'] . "')=0, nowvideo, '" . $_POST['nowvideo'] . "'), `nowvideohd` = '".$_POST['nowvideohd']."' WHERE name='".$_POST['movie_name']."';"; 

作爲一個方面說明,您的查詢是非常不安全的。您直接從表單中將數據放入查詢中。閱讀SQL注入&消毒查詢。

如果你打算保護你的查詢,我也會閱讀PDO。

+0

@Stayner我打算只在家中使用它,所以我不認爲這是一個問題,但是mysql轉義字符串可以清理它嗎? – user2551208

+0

'mysql_ *'查詢現在不推薦使用,因此建議使用PDO。你可以在這裏閱讀PDO:http://www.php.net/manual/en/intro.pdo.php。但是,如果'mysql_real_escape_string'是必須的,它將清理查詢。 – Ryan

+0

@Stayner再次感謝!而mysqli_而不是mysql,對吧? – user2551208

1

您應該POST變量保存到一個變量,進行檢查和清潔,以避免SQL注入

//Safe get the variables 
$nowVideo = filter_input(INPUT_POST, 'nowVideo'); 
$nowVideoHd = filter_input(INPUT_POST, 'nowvideohd'); 
$movieName = filter_input(INPUT_POST, 'movie_name'); 

if (!empty($movieName)) { 
    //Avoid sql injection 
    $nowVideo = mysqli_real_escape_string($connectionLink, $nowVideo); 
    $nowVideoHd = mysqli_real_escape_string($connectionLink, $nowVideo); 
    $movieName = mysqli_real_escape_string($connectionLink, $movieName); 

    $update_sql = 'UPDATE movies SET nowvideo = ' . (empty($nowVideo) ? 'nowvideo' : "'$nowVideo'") . ', nowvideohd = ' . $nowVideoHd . " WHERE name = '$movieName'"; 
} 
else { 
    //Show error 
} 

你應該爲nowVideoHd的情況下,該nowVideoHd變量是空的設置默認值。您應該將其設置爲$ nowVideo var或默認值。

0

所有$ _POST ['columnx']應該是「。$ _ POST ['columnx']」。

相關問題