我正在尝试使用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服务器版本对应的手册,以便在“
附近使用正确的语法
这样的事情怎么办?
答案 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);