在MySql SQL语句中插入PHP变量

时间:2014-01-03 07:15:50

标签: php sql pdo

我正在尝试使用PHP和MySql PDO这样做:

//PHP Variables
$msg_a = 'Too Little';
$msg_b = 'Score OK';

$sql = "select if(stdScore >= stdRequired, $msg_a, $msg_b) from scores;"

$results = $conn->prepare($Sql);

$results->execute();

AFAIK这应该有效。但我不断收到以下错误消息:

  

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在“

附近使用正确的语法

这样的事情怎么办?

4 个答案:

答案 0 :(得分:3)

$results = $conn->prepare($Sql);

--------------------------------------------- ^(资本S)

它应该是小写的s

$results = $conn->prepare($sql);

因为你有:

$sql = "select if(stdScore >= stdRequired, $msg_a, $msg_b) 
        from scores";(//semicolon after double quotes)

--- ^
使用小写s$sql

答案 1 :(得分:2)

你能试试吗,

$sql = "select if(stdScore >= stdRequired, $msg_a, $msg_b) from scores";

$results = $conn->prepare($sql);

答案 2 :(得分:0)

你试过这种方式吗?

$sql = "select if(stdScore >= stdRequired, "'.$msg_a.'", "'.$msg_b.'") from scores;"

答案 3 :(得分:0)

由于您已经在使用PDO 不进行查询字符串插值,因此您的代码容易受到sql注入和值逃逸问题的影响。而是正确使用准备好的陈述。

您的代码可能看起来像

$msg_a = 'Too Little';
$msg_b = 'Score OK';
// use placeholders in a query string
$sql = "SELECT IF(stdScore >= stdRequired, :msg_a, :msg_b) msg FROM scores";
// prepare the statement
$query = $conn->prepare($sql);
// bind parameters and execute the query
$query->execute(array(':msg_a' => $msg_a, ':msg_b' => $msg_b));
// fetch the resultset
$rows = $query->fetchall(PDO::FETCH_ASSOC);