等于PHP参数和mysql数据使foreach循环不起作用

A D*_*iss 1 php mysql quotes foreach

当我正在做这个foreach循环完美的工作.

<?php
function checkInDB($NIC){
$user='root';
$pass='123';
$db='mysql:host=localhost;dbname=recruit';
$dbh= new PDO($db,$user,$pass);

$sql = 'SELECT FirstName 
         FROM cv 
           JOIN candidate ON cv.cvID=candidate.cvID 
         WHERE ((submittedDate > NOW() - INTERVAL 365 day) 
           AND (candidate.NIC="906548765V"))';

echo '<h3>candidates</h3>', '<hr />', PHP_EOL;
echo '<table border=1>', PHP_EOL;
foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) {

    echo '<tr><td>', implode('</td><td>', $row), '</td></tr>', PHP_EOL;
}
echo '</table>', PHP_EOL;
}
checkInDB("906548765V");

?>
Run Code Online (Sandbox Code Playgroud)

但是当我改变 甚至(candidate.NIC="906548765V")变为 现实时,会抛出一个意想不到的错误(candidate.NIC=$NIC)echo ($NIC==="906548765V");

为foreach()提供的参数无效

到底发生了什么?

Pin*_*niq 5

在PHP中有两种方法来定义字符串:

  • 双引号
  • 单引号

使用单引号时,字符串将按定义.使用双引号时,PHP将解析字符串.

然后另一个说明.永远不要将变量包含在查询字符串中.只是不要.SQL注入等等.总是使用准备好的陈述.您正在使用PDO,因此很容易:

$stmt = $dbh->prepare('SELECT cols FROM table WHERE col1 = :myCol1Value');
$stmt->bindParam('myCol1Value',$theActualValue);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)