为什么hello不显示在屏幕上,为什么while循环没有执行? 另外我有一个问题,因为数组$ zipcodeA [$ x]可能包含随机邮政编码,如90564 80564 70564 88464 98754,但数据库tman可能包含信息,如90564 90564 90564 80564 70564 70564 88464 98754.如何选择浏览数组$ zipcodeA [$ x]中的所有邮政编码,而不是仅仅提取每个邮政编码之一的信息?数据库包含随机邮政编码,许多邮政编码可以重复,数组只有许多不同的邮政编码,没有重复邮件
for($x = 0; $x <= $v; $x++)
{
$stmt = $conn->prepare("SELECT * FROM tman WHERE approve = 'Y' AND zip = :zipp ORDER BY id desc limit :limit");
$stmt->bindParam(":zipp", $zipcodeA[$x], PDO::PARAM_INT);
$stmt->bindValue(':limit', (int) $limit, PDO::PARAM_INT);
echo '<br>zipcode: ' . $zipcodeA[$x] . '<br>';
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$id2 = $row['id'];
$name = $row['name'];
echo 'hello';
}
}
答案 0 :(得分:1)
尝试这样做:
$limit = ($pageno - 1) * $rows_per_page . ',' . $rows_per_page;
for($x = 0; $x <= $v; $x++) {
$stmt = $conn->prepare("SELECT * FROM tman WHERE approve = 'Y' AND zip = :zipp ORDER BY id desc LIMIT " . $limit);
$stmt->bindParam(":zipp", $zipcodeA[$x], PDO::PARAM_INT);
echo '<br>zipcode: ' . $zipcodeA[$x] . '<br>';
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if (!empty($result)) {
$id2 = $result['id'];
$name = $result['name'];
echo 'hello';
}
}
答案 1 :(得分:1)
$stmt = $conn->prepare("SELECT * FROM tman
WHERE approve='Y' AND zip=:zipp
ORDER BY id DESC LIMIT $limiter");
根据PHP PDO::prepare手册有关准备好的陈述:
使用这些参数绑定 任何用户输入 ,不要包含 用户直接在查询中输入。
由于准备语句允许您过滤用户输入,因此不允许这些参数替换应由开发人员设置的查询的任何其他部分。例如,允许参数替换表名将提供对攻击者的访问权,以便在用户有权访问的任何内容上使用用户的权限。同样,在您的情况下,LIMIT是通过MySQL提供的查询优化。利用此功能可以关闭存在大量数据集的系统。
此外,您应该使用Try/Catch statement包装PDO查询,以防止其他人在抛出PDO异常时看到它们。
//Load your IP here
$dev_ip = 'your.ip.address.here';
//Filter the user's IP
$user_ip = filter_input(INPUT_SERVER,'REMOTE_ADDR', FILTER_VALIDATE_IP);
//Set your limiting variable
$limiter = ($pageno-1)*$rows_per_page.','.$rows_per_page;
for($x = 0; $x <= $v; $x++) {
try {
$stmt = $conn->prepare("SELECT * FROM tman WHERE approve='Y' AND zip=:zipp ORDER BY id desc LIMIT $limiter");
$stmt->bindParam(":zipp", $zipcodeA[$x], PDO::PARAM_INT);
if(array_key_exists($x, $zipcodeA)&&!empty($zipcodeA[$x])){
echo '<br>zipcode: ' . $zipcodeA[$x] . '<br>';
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
if (array_key_exists('id', $result)&&!empty($result['id'])) {
$id2 = $result['id'];
} else {
if($user_ip==$dev_ip){
echo 'No ID';
}
}
if (array_key_exists('name', $result)&&!empty($result['name'])) {
$name = $result['name'];
} else {
if($user_ip==$dev_ip){
echo 'No Name';
}
}
}
} catch(PDOException $ex) {
echo "An Error occured!"; //user friendly message
if($user_ip==$dev_ip){
echo $ex->getMessage();
}
}
}
答案 2 :(得分:0)
不要将循环条件建立在 fetch()的结果上。获得结果并单独评估。
来自docs:“此函数的成功返回值取决于获取类型。” IE对于布尔评估来说,这不是一件好事。 如果失败,它将返回false但是当它成功时它可能会以意想不到的方式运行。
更好 - 使用 fetchAll() 并循环生成结果数组。
最后 - 使用 print_r()检查结果集。确保你有东西要循环。