在MySql SQL语句中插入PHP变量

在MySql SQL语句中插入PHP变量,php,sql,pdo,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(); 好吧,这应该行得通的。但我一直收到以下错误消息:

我正试图使用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();
好吧,这应该行得通的。但我一直收到以下错误消息:

致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near的正确语法

这样的事情怎么办

$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

---------------------------------------------^(大写字母S)

它应该用小写字母
s

$results = $conn->prepare($sql);
因为你有:

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

用小写的
s
$sql

你试过这种方法吗

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

你这样试过吗

$sql = "select if(stdScore >= stdRequired, "'.$msg_a.'", "'.$msg_b.'") from scores;"
你能试试这个吗

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

$results = $conn->prepare($sql);
你能试试这个吗

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

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

因为您已经在使用PDO了,所以不要执行查询字符串插值,使代码容易受到sql注入和值转义问题的影响。相反,正确使用准备好的语句

你的代码可能看起来像

$msg_a='太少';
$msg_b=‘得分正常’;
//在查询字符串中使用占位符
$sql=“选择IF(stdScore>=stdRequired,:msg_a,:msg_b)msg FROM scores”;
//准备声明
$query=$conn->prepare($sql);
//绑定参数并执行查询
$query->execute(数组(':msg_a'=>$msg_a',:msg_b'=>$msg_b));
//获取结果集
$rows=$query->fetchall(PDO::FETCH_ASSOC);

因为您已经在使用PDO所以不要执行查询字符串插值使您的代码容易受到sql注入和值转义问题的影响。相反,正确使用准备好的语句

你的代码可能看起来像

$msg_a='太少';
$msg_b=‘得分正常’;
//在查询字符串中使用占位符
$sql=“选择IF(stdScore>=stdRequired,:msg_a,:msg_b)msg FROM scores”;
//准备声明
$query=$conn->prepare($sql);
//绑定参数并执行查询
$query->execute(数组(':msg_a'=>$msg_a',:msg_b'=>$msg_b));
//获取结果集
$rows=$query->fetchall(PDO::FETCH_ASSOC);

PHP变量区分大小写。您的代码仍然可以接受SQL注入。PDO不是一个灵丹妙药,您需要在绑定参数中正确使用它,而不是字符串连接。如果仍然插入查询字符串,为什么还要麻烦使用
prepare
;然后在服务器上运行它,检查查询是否正确。PHP变量区分大小写。您的代码仍然可以接受SQL注入。PDO不是一个灵丹妙药,您需要在绑定参数中正确使用它,而不是字符串连接。如果仍然插入查询字符串,为什么还要麻烦使用
prepare
;然后在服务器上运行它来检查查询是否正确。当php变量没有在查询中得到解释时,我们通常会像您提到的那样尝试上述方法,但我认为OP不会因此而得到上述错误。当php变量没有在查询中得到解释时,我们通常会像您提到的那样尝试上述方法,但是我不认为OP会因此而出现上述错误。没有必要。Php允许您将变量直接插入字符串中。@MrVimes,什么是不必要的?使用那些引号字符。PHP允许这样的直接插入——“helloworld$myvar Hello”。发问者的问题不在于绳子。这不是必须的。Php允许您将变量直接插入字符串中。@MrVimes,什么是不必要的?使用那些引号字符。PHP允许这样的直接插入——“helloworld$myvar Hello”。发问者的问题不是绳子。