【问题标题】:PHP+MySQL Printing query resultsPHP+MySQL 打印查询结果
【发布时间】:2014-05-31 17:31:44
【问题描述】:

我以前打印 MySQL 查询结果是这样的:

$query="SELECT fname,lname,email FROM users";
    $result=mysql_query($query);
    $num=mysql_numrows($result);
    mysql_close();
    $i=0;
    echo '<table BORDERCOLOR=black>';
    ?>
    <tr>
    <th>Vardas</th><th>Pavarde</th><th>E-Mail</th>
    </tr>

    <?php

    while ($i < $num) {
        $field1=mysql_result($result,$i,"fname");
        $field2=mysql_result($result,$i,"lname");
        $field3=mysql_result($result,$i,"email");

        echo "<td>";
        echo $field1; 
        echo "</td>";
        echo "<td>";
        echo $field2;
        echo "</td>";
        echo "<td>"; 
        echo $field3;
        echo "</td>";
        echo "</tr>";
        $i++;
    }
    echo "</table>";

但这一次我必须使用不同的东西,我想知道如何在使用下面显示的函数/查询时打印出我的结果:

查询代码(在'class DB'中):

function query($querytext) {
        $rs = mysql_query($querytext, $this->_link);
        if($this->_debug) {
            $this->addDebugMessage("\t<tr>\n\t\t<td class=\"debug_nr\">".$this->_queryCount++."</td>\n\t\t<td class=\"debug_queInfo\"><b>Query: (".@mysql_num_rows($rs).")</b></td>\n\t\t<td>" . htmlspecialchars($querytext) . "</td>\n\t</tr>\n");
            if(mysql_error() != '') {
                $this->addDebugMessage("\t<tr>\n\t\t<td class=\"debug_nr\">".$this->_queryCount++."</td>\n\t\t<td class=\"debug_queInfo\"><b>Error #".mysql_errno($this->_link)." :</b></td>\n\t\t<td>" . htmlspecialchars(mysql_error($this->_link)) . "</td>\n\t</tr>\n");
            }
        }
        if($rs) {
            $num_rows = @mysql_num_rows($rs);
            if($num_rows) {
                if($num_rows > 0) {
                    $rsarray = array();
                    while($line = mysql_fetch_array($rs , MYSQL_ASSOC)) {
                        array_push($rsarray, $line);
                    }
                    mysql_free_result($rs);
                    return $rsarray;
                } else {
                    return false;
                }
            } else {
                if(mysql_affected_rows($this->_link) > 0) {
                    return true;
                } else {
                    return false;
                }
            }
        } else {
            return false;
        }
    }

(在“类用户”中)

function findUser($phrase){
        global $DB;
        $results=$DB->query("SELECT * FROM users WHERE fname LIKE '%'$phrase'%' OR lname LIKE '%'$phrase'%' OR email LIKE '%'$phrase'%'");
            return $results;
    }

在 index.php 中(我用什么打印出来?):

$USER->findUser("john");

或者应该是

$results= $USER->findUser("john);

$results=DB->findUser("john");

【问题讨论】:

  • 你确定 findUser 函数真的在做什么吗?好像没有返回查询结果。
  • 我不确定。我在 $DB->query("DELETE...") 中使用了相同的函数,这很有效,我想我需要在这个函数中使用“return $query”?
  • 是的,我认为 findUser 应该 return$DB-&gt;query() 得到什么。对于 DELETE 查询,没有结果,因此您不一定需要返回。
  • 另外,请注意,您的查询函数(在一些奇怪的事情中)返回的结果是数组数组,而不是 MySQL 结果。这意味着你不使用 mysql_numrows 和 mysql_result 来循环数据,只是一个简单的 foreach 或类似的东西。
  • 我已将返回值编辑到代码中,这是否意味着我无法像第一种方法那样将其很好地打印到表格中?

标签: php mysql sql arrays echo


【解决方案1】:

好像有错别字

function findUser($phrase){
        global $DB;
        $DB->query("SELECT * FROM users WHERE fname LIKE '%'$phrase'%' OR lname LIKE '%'$phrase'%' OR email LIKE '%'$phrase'%'");
    }

您的查询中有多余的引号。

function findUser($phrase){
        global $DB;
        $DB->query("SELECT * FROM users WHERE fname LIKE '%$phrase%' OR lname LIKE '%$phrase%' OR email LIKE '%$phrase%'");
    }

【讨论】:

  • 我是否需要移向 cmets 部分。因为这不会解决 OP 的问题?
  • 我不确定,因为原始格式是 '%keyword%',而且由于我使用的是函数中的一个,所以我认为它应该是 '%'variable'%'。无论如何,关于打印部分的任何帮助?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多