2015-07-18 129 views
0

您好我目前有php语句中的if语句与准备语句有关的问题,无论我在检查get_result时输入什么内容,我的语句总是如此。我真的不知道我在做什么,我对PHP和准备语句的概念非常陌生。PHP检查在if语句中准备好的语句

$searchtext= $_POST['search-box']; 
$sqlName= $connect->prepare("SELECT * FROM SearchPG WHERE PGName LIKE ? "); 
       $sqlName->bind_param("s", $searchtext); 
       $sqlName->execute(); 

       $NameResult = $sqlName->get_result(); 

       $sqltext= $connect->prepare("SELECT * FROM SearchPG WHERE PGKeywords LIKE ? "); 
       $sqltext->bind_param("s", $searchtext); 
       $sqltext->execute(); 

       $TextResult = $sqltext->get_result(); 
if($NameResult->num_rows > 0 || $TextResult->num_rows > 0){ 
         if($NameResult->num_rows > 0){ 
          echo "made it into sqlname"; 
          while($rs = $NameResult->fetch_assoc()){ 
           echo "name result"; 

           ?> 
           <div class="row resultcontent"> 
            <a href="<?php echo $rs['PGUrl'];?>"> 
             <div class="col-sm-8 searchRsltCont"> 
              <img src="<?php echo $rs['PGImgUrl'];?>" class="searchRsltimg" alt="search result image" /> 
              <div class="contshading"> 
              </div> 
             </div> 
             <div class="col-sm-4 searchRslttxt"> 
              <h1><?php echo "name".$rs['PGName'];?></h1> 
             </div> 
            </a> 
           </div> 
           <?php 
           $count++; 
          } 
         } 
         if($count<10){ 
          echo "exploded result"; 
          foreach($searchbit as $value){ 
           $temp = '%'.$value.'%'; 
           $sqlvalue= $connect->prepare("SELECT * FROM SearchPG WHERE PGName LIKE ? OR PGKeyword LIKE ? "); 

           $sqlvalue->bind_param("ss", $temp, $temp); 
           $sqlvalue->execute(); 
           $ValueResult = $sqlvalue->get_result(); 

           if($ValueResult->num_rows > 0){ 
            while($rs = $ValueResult->fetch_assoc()){ 
             ?> 
             <div class="row resultcontent"> 
              <a href="<?php echo $rs['PGUrl'];?>"> 
               <div class="col-sm-8 searchRsltCont"> 
                <img src="<?php echo $rs['PGImgUrl'];?>" class="searchRsltimg" alt="search result image" /> 
                <div class="contshading"> 
                </div> 
               </div> 
               <div class="col-sm-4 searchRslttxt"> 
                <h1><?php echo "name".$rs['PGName'];?></h1> 
               </div> 
              </a> 
             </div> 
             <?php 
             $count++; 
            } 
           } 
          } 
          while($rs = $TextResult->fetch_assoc()){ 
           ?> 
           <div class="row resultcontent"> 
            <a href="<?php echo $rs['PGUrl'];?>"> 
             <div class="col-sm-8 searchRsltCont"> 
              <img src="<?php echo $rs['PGImgUrl'];?>" class="searchRsltimg" alt="search result image" /> 
              <div class="contshading"> 
              </div> 
             </div> 
             <div class="col-sm-4 searchRslttxt"> 
              <h1><?php echo "name".$rs['PGName'];?></h1> 
             </div> 
            </a> 
           </div> 
           <?php 
           $count++; 
          } 


         } 

我都试过,如果(!$结果),如果($ result-> NUM_ROWS> 0),如果($ result-> affected_rows)等,但似乎没有任何工作有任何人有任何想法我什么我做错了

+0

对不起,但请将“代码墙”缩短为展示此问题的最小示例。没有人想要完成所有这些工作。 – arkascha

+0

@arkascha对不起,我清理它 – noob

回答

0

很有可能你没有安装“native driver”(mysqlnd),这对于get_result()方法是必需的。

cf. http://php.net/manual/en/mysqli-stmt.get-result.php

尝试使用PDO:

<?php 

$dbh = new PDO(
    'mysql:dbname=myDatabase;host=myHost', 
    'myUsername', 'myPassword'); 

$stmt = $dbh->prepare('SELECT * FROM SearchPG WHERE PGName LIKE ? '); 
$stmt->bindParam(1, $searchtext, PDO::PARAM_STR); 
$stmt->execute(); 
$result = $stmt->fetchAll(); 
foreach($result as $row) { 
    print_r($row); 
} 
+0

我刚刚检查了我的phpinfo.php和mysqlnd启用,也get_result似乎工作它只是任何如果与它有关的陈述总是似乎是真的,当他们应该是假的,但如果这是真的,那么就好像if语句根本就没有。这很奇怪。对于PDO,你不需要安装东西,因为如果是这样的话,我不能使用它,因为我正在租用服务器。 – noob

+0

将结果集赋给$ TextResult之后,你能告诉我var_dump($ TextResult)的结果是什么吗?退出;'会? – 1sloc

+0

当结果为真时,我得到这个:object(mysqli_result)#6(5){[“current_field”] => int(0)[“field_count”] => int(8)[“length”] => NULL [“num_rows”] => int(0)[“type”] => int(0)}如果它失败,我不会得到任何结果。当它假设为true时,NameResult获得与之前相同的结果,但假设它为假时,也会得到相同的结果。 – noob

0

对于任何人,也许新的PHP,准备发言,有我类似的问题,我解决我的问题,通过切换get_result更改代码后store_result以适应store_result事情似乎完美地工作。这是我的新代码,它仍然需要一些修复和清理,但我希望这可以帮助有需要的人。

$sqlname= $connect->prepare("SELECT PGID, PGName, PGUrl, PGImgUrl FROM SearchPG WHERE PGName LIKE ? "); 
       $sqlname->bind_param("s", $searchtext); 
       $sqlname->execute(); 
       $sqlname->store_result(); 

       $sqltext= $connect->prepare("SELECT PGID, PGName, PGUrl, PGImgUrl FROM SearchPG WHERE PGKeywords LIKE ? "); 
       $sqltext->bind_param("s", $searchtext); 
       $sqltext->execute(); 
       $sqltext->store_result(); 
if($sqlname->num_rows > 0 || $sqltext->num_rows > 0){ 
         if($sqlname->num_rows > 0){ 
          $sqlname->bind_result($id, $name, $url, $imgurl); 

          while($rs = $sqlname->fetch()){ 


           ?> 
           <div class="row resultcontent"> 
            <a href="<?php echo $url;?>"> 
             <div class="col-sm-8 searchRsltCont"> 
              <img src="<?php echo $imgurl;?>" class="searchRsltimg" alt="search result image" /> 
              <div class="contshading"> 
              </div> 
             </div> 
             <div class="col-sm-4 searchRslttxt"> 
              <h1><?php echo "name".$name;?></h1> 
             </div> 
            </a> 
           </div> 
           <?php 
           $count++; 
          } 
         } 
         if($count<10){ 


          if($words > 1){ 
          foreach($searchbit as $value){ 

           $temp = '%'.$value.'%'; 
           $sqlvalue= $connect->prepare("SELECT PGID, PGName, PGUrl, PGImgUrl FROM SearchPG WHERE PGName LIKE ? OR PGKeywords LIKE ? "); 
           if (false===$sqlvalue) { 
            die('connect failed: ' . htmlspecialchars($sqlvalue->error)); 
           } 
           $sqlvalue->bind_param("ss", $temp, $temp); 
           if (false===$sqlvalue) { 
            die('bind failed: ' . htmlspecialchars($sqlvalue->error)); 
           } 
           $sqlvalue->execute(); 
           if (false===$sqlvaue) { 
            die('execute() failed: ' . htmlspecialchars($sqlvalue->error)); 
           } 
           $sqlvalue->store_result(); 

           //$ValueResult = $sqlvalue->get_result(); 

           if($sqlvalue->num_rows > 0){ 
            $sqlvalue->bind_result($id, $name, $url, $imgurl); 
            while($rs = $sqlvalue->fetch()){ 
             ?> 
             <div class="row resultcontent"> 
              <a href="<?php echo $url;?>"> 
               <div class="col-sm-8 searchRsltCont"> 
                <img src="<?php echo $imgurl;?>" class="searchRsltimg" alt="search result image" /> 
                <div class="contshading"> 
                </div> 
               </div> 
               <div class="col-sm-4 searchRslttxt"> 
                <h1><?php echo "name".$name;?></h1> 
               </div> 
              </a> 
             </div> 
             <?php 
             $count++; 
            } 
           } 
          } 
          } 
          $sqltext->bind_result($id, $name, $url, $imgurl); 

          while($rs = $sqltext->fetch()){ 
           echo "made it into the loop"; 
           ?> 
           <div class="row resultcontent"> 
            <a href="<?php echo $url;?>"> 
             <div class="col-sm-8 searchRsltCont"> 
              <img src="<?php echo $imgurl;?>" class="searchRsltimg" alt="search result image" /> 
              <div class="contshading"> 
              </div> 
             </div> 
             <div class="col-sm-4 searchRslttxt"> 
              <h1><?php echo "name".$name;?></h1> 
             </div> 
            </a> 
           </div> 
           <?php 
           $count++; 
          } 


         } 
        }