2012-03-15 85 views
0

我一直试图破解这个2小时,但有些错误。我非常习惯于在没有mysqli的情况下执行任何操作,但是请读一下,建议从常规mysql命令转向它。因此,我坚持以下几点:php mysqli select resultset is not showing anything

<?php 
      $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
      if ($result = $mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'")) { 
       while ($row = $result->fetch_object()) { 
        echo "<h2>Result:</h2><br>"; 
        echo "ID: " . $row->id . "<br>";     
        echo "Name: " . $row->cust_name . "<br>"; 
        echo "Invoice No: " . $row->invoice_num . "<br>"; 
        echo "Date: " . $row->date_recorded . "<br>"; 
       } 

      } 

     ?> 

此代码是在应该显示的查询结果,但什么都不显示的页面中。我检查了关键字和queryType变量都已设置,并且它们包含正确的值。任何帮助将不胜感激。所有我试图做的是:select语句根据提交的invoice_num检索所有细节。

编辑:从帮助我收到了,我能得到这个工作:

$query = "SELECT * FROM records WHERE ".$queryType. " LIKE '%$keyword%' "; 
       if ($result = $mysqli->query($query)) { 
        while ($row = $result->fetch_object()) { 
         echo "<h2>Result:</h2><br><hr/> "; 
         echo "ID: " . $row->id . "<br>";     
         echo "Name: " . $row->cust_name . "<br>"; 
         echo "Invoice No: " . $row->invoice_num . "<br>"; 
         echo "Date: " . $row->date_recorded . "<br>"; 
         echo "<hr/>"; 
        } 

       } 
+0

其中是$ queryType和$关键字定义? – 2012-03-15 16:07:57

+0

你确定有数据可供选择吗?如果实际存在,该代码将仅输出数据。 – deed02392 2012-03-15 16:06:48

+0

如果我在使用mysqli的语法中遇到错误,我更担心......它是基于OOP的旧语法的一次飞跃。 – 2012-03-15 16:08:29

回答

1

你肯定有数据来选择?如果实际存在,此代码将仅输出数据。

确保$queryType$keyword设置和有理智的价值,将产生一个结果

紧接在查询之前使用var_dump($queryType)var_dump($keyword)。现在检查你的输出。他们都是字符串吗?直接在PHPMyAdmin中运行此查询并检查您获得的行数。

如果你不能做到这一点尝试echo'ing与查询值返回的行数一起:

if ($result = $mysqli->query("SELECT * FROM records WHERE $queryType = '$keyword'")) 
{ 
    while ($row = $result->fetch_object()) 
    { 
     echo "<h1>Query WHERE '$queryType' = '$keyword' yielded {$result->num_rows} rows!</h1>"; 
     echo "<h2>Result:</h2><br>"; 
    ... 

注意,你不应该有列($查询类型),如果周围的单引号你坚持说你应该使用反引号(`),但它确实没有必要 - 如果你那么迂腐,你应该使用准备好的语句。

此外一定要过滤它们的任何可能允许SQL注入潜在危险的值。请参阅:mysqli::real_escape_string

+0

任何想法我该怎么办?我还没有开始工作?因为否则我需要为硬编码查询的每个可能性创建函数 – 2012-03-16 05:13:22

+0

这很愚蠢。查看我的更新。 – deed02392 2012-03-16 09:05:11

+0

嘿,我做了一些工作,我觉得和你真的很相似。但是,感谢您的帮助!我知道它有使用%的漏洞,但并不重要,因为它是安全的搜索,而不是公开的。我的代码更新超过 – 2012-03-17 05:11:30

1

假设$queryType是您的记录表中​​列的名称,那么我相信问题是您的WHERE子句。

不是:

$mysqli->query("SELECT * FROM records WHERE '$queryType' = '$keyword'") 

你应该有:

$mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'") 

请注意,我已经删除了单引号括起来$queryType并使用complex (curly) syntax

而且,在未来的你可能想尝试使用else块来捕获错误:

 $mysqli = new mysqli('localhost', 'admin', 'test123', 'kadmindb'); 
     if ($result = $mysqli->query("SELECT * FROM records WHERE {$queryType} = '{$keyword}'")) { 
      while ($row = $result->fetch_object()) { 
       echo "<h2>Result:</h2><br>"; 
       echo "ID: " . $row->id . "<br>";     
       echo "Name: " . $row->cust_name . "<br>"; 
       echo "Invoice No: " . $row->invoice_num . "<br>"; 
       echo "Date: " . $row->date_recorded . "<br>"; 
      } 

     } 
     else 
     { 
       echo "Error: " . $mysqli->error; 
     } 
+0

,没有工作brian..sorry让你失望:(我改变了括号,但没有再次显示 – 2012-03-15 16:44:14