Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO While循环导致无限循环_Php_Css_Pdo_While Loop_Infinite Loop - Fatal编程技术网

Php PDO While循环导致无限循环

Php PDO While循环导致无限循环,php,css,pdo,while-loop,infinite-loop,Php,Css,Pdo,While Loop,Infinite Loop,我有一个PDO对象来连接到数据库以显示属性,我正在尝试使用if语句在没有找到行的情况下显示消息。消息是有效的,但是当找到结果时,循环返回无止境的行并中断我的css 它唯一起作用的时候是在循环括号内定义循环条件,但if语句条件返回“undefined variable error”。我怎样才能让这两种方法一起工作呢?我已经研究了其他问题,尝试了不同的方法,但都没有取得任何进展 //代码 <?php function connectDB () { global $hostname,

我有一个PDO对象来连接到数据库以显示属性,我正在尝试使用if语句在没有找到行的情况下显示消息。消息是有效的,但是当找到结果时,循环返回无止境的行并中断我的css

它唯一起作用的时候是在循环括号内定义循环条件,但if语句条件返回“undefined variable error”。我怎样才能让这两种方法一起工作呢?我已经研究了其他问题,尝试了不同的方法,但都没有取得任何进展

//代码

<?php function connectDB () {

    global $hostname, $db, $user, $pass;

    $dbh = new PDO("mysql:host=$hostname; dbname=$db; charset=utf8", $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    if (stripos($_SERVER['REQUEST_URI'], 'sales.php')) {
         $sql = "SELECT * FROM DATABASE.property WHERE (bit1&33=33 and sendToPortals ='0') and (addressToDisplay like ? or fullDetails like ?) ORDER BY pricePerWeek ASC";
    }
    else if (stripos($_SERVER['REQUEST_URI'], 'lettings.php')) {
         $sql = "SELECT * FROM DATABASE.property WHERE bit1&17=17 and (addressToDisplay like ? or addressToDisplay like ?) ORDER BY pricePerWeek ASC";
    }

    $query = $dbh->prepare($sql);
    $query->execute(array('%Bedford Court Mansions%','%Adeline Place%')); 
    $query->setFetchMode(PDO::FETCH_ASSOC); 
    $r = $query->fetch();

        if (!$r) {
        echo 'We have successfully Sold 
            all their current property within Bedford Court Mansions, WC1 and urgently require 
            new apartments for sale.
            Call us now on 020 72459 3345, if you are considering 
            selling your property.';
        } 
        else { 

        while ($r): 

            $address = $r['addressToDisplay']; 
            $beds = $r['bedrooms'];
            $price = $r['price_week_min'];
            $summary = $r['summary'];
            $image = $r['mainImage'];
            $area = $r['addressAlias'];
            $id = $r['id'];

            $address1 = str_replace(' ','-',$address);
            $address2 = str_replace(',','',$address1);
?>

    <li class="property">
        <div class="image-wrapper overlay-fade-in">
            <img src="http://www.hurford-salvi-carr.co.uk/pss/image-resize?height=257&width=449&black=1&reflection=0&prop=0&asset=pictures&file=<?php echo $image; ?>" />
            <div class="image-overlay-content">
                <h2>
                    <a href="http://www.hurford-salvi-carr.co.uk/property-for-sale/<?php echo strtolower(str_replace(' ','-',$area)); ?>/<?php echo strtolower(str_replace(' ','-',$address)); ?>/<?php echo $id; ?>" target="_blank">Find out More</a>
                </h2>
            </div>
        </div>

        <div class="property-content">
            <h3><?php echo $address; ?></h3>
            <p><strong>£ <?php echo number_format($price); ?> </strong></p>
            <p><strong><?php echo $beds; ?> &nbsp; Beds</strong></p>
            <p>
                <?php echo substr($summary, 0, 263); ?>...</p>
            <a href="http://www.hurford-salvi-carr.co.uk/property-for-sale/<?php echo strtolower(str_replace(' ','-',$area)); ?>/<?php echo strtolower(str_replace(' ','-',$address)); ?>/<?php echo $id; ?>" target="_blank">Click here to find out more</a>
        </div>
    </li>

<?php           
        endwhile; }}
?>

如评论中所述,问题的根源在于总是在
while
语句中检查变量,而不是实际的
fetch()
方法。这又类似于
while(true)
,它创建了从数据库返回的第一行的无限循环

要检查数据库中是否有任何结果,请检查
SELECT
查询返回的行数,如果不是0,则可以循环查看结果。如果为0,则显示一条漂亮的消息,告诉他们未找到任何内容

<?php 
$query = $dbh->prepare($sql);
$query->execute(array('%Bedford Court Mansions%','%Adeline Place%')); 
$query->setFetchMode(PDO::FETCH_ASSOC);
$numRows = $query->rowCount();

if ($numRows == 0) {
    // No rows returned from database
} else { 
    // We have results!
    while ($query->fetch()): 
        // Loop through it all
?>

参考:


基本上,这是因为变量
$r
总是被设置的,所以
while
-循环有点
while(true):
。只需将参数替换为
while($r=$query-fetch()):
感谢您的响应,是的,这就是以前的情况,但是我无法使if语句正常工作,我已尝试将该语句放入循环中,但它没有回显任何内容。您可以说print\r($r);返回什么?非常感谢,这非常有效,只是一个简单的问题,在php手册中,SELECT语句上的rowCount()不能保证对所有数据库都有效,您如何知道哪个数据库支持它?我还没有真正研究过,所以我不是100%确定。但是如果您想知道您的数据库是否支持它,只需运行它一次并用数据库控制输出-如果正确,那么您的数据库就受支持。