2014-01-13 55 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']”。

相关问题