等于 PHP 参数和 mysql 数据使 foreach 循环不起作用
equaling the PHP argument and mysql data makes foreach loop not work
当我执行此 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");
?>
但是当我将 (candidate.NIC="906548765V")
更改为 (candidate.NIC=$NIC)
这甚至使 echo ($NIC==="906548765V");
为真,抛出意外错误
Invalid argument supplied for foreach()
那里到底发生了什么?
尝试 AND (candidate.NIC="'.$NIC.'")
,因为它是一个字符串,您仍然需要引号。
在PHP中有两种定义字符串的方法:
- 双引号
- 单引号
当您使用单引号时,字符串将与定义的一样。
使用双引号时,PHP 将解析字符串。
然后在另一个笔记上。永远不要在查询字符串中包含变量。只是不要。 SQL 注射等等。始终使用准备好的语句。您正在使用 PDO,所以很简单:
$stmt = $dbh->prepare('SELECT cols FROM table WHERE col1 = :myCol1Value');
$stmt->bindParam('myCol1Value',$theActualValue);
$stmt->execute();
当我执行此 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");
?>
但是当我将 (candidate.NIC="906548765V")
更改为 (candidate.NIC=$NIC)
这甚至使 echo ($NIC==="906548765V");
为真,抛出意外错误
Invalid argument supplied for foreach()
那里到底发生了什么?
尝试 AND (candidate.NIC="'.$NIC.'")
,因为它是一个字符串,您仍然需要引号。
在PHP中有两种定义字符串的方法:
- 双引号
- 单引号
当您使用单引号时,字符串将与定义的一样。 使用双引号时,PHP 将解析字符串。
然后在另一个笔记上。永远不要在查询字符串中包含变量。只是不要。 SQL 注射等等。始终使用准备好的语句。您正在使用 PDO,所以很简单:
$stmt = $dbh->prepare('SELECT cols FROM table WHERE col1 = :myCol1Value');
$stmt->bindParam('myCol1Value',$theActualValue);
$stmt->execute();