MySQL 和 PHP %like% 查询.在phpmyadmin中工作,但不同的结果php


mysql and php %like% query. Works in phpmyadmin but different results php

我有一些搜索字段可以查看几个不同的表。

"display_name"表单字段和"最后一个"表单字段显示不同的结果,然后它直接进入phpmyadmin。

如果我在我的 php 脚本中回显出 mysql 查询并将其粘贴到 phpmyadmin 中。它列出了正确的结果。但是在 php/html 页面上,它没有列出相同的内容。

例如。如果某人的全名是内森·斯宾塞,而我将斯宾塞放入"最后一个"表单字段中,则只会显示 1 个结果或 2 个结果。但是,通过将其直接粘贴到phpmyadmin中并运行它,实际上可以找到5个结果。

我一直在为此斗争多年,它让我发疯。

这是页面顶部的 PHP:

<?php
// SEARCH
if(isset($_POST['submit'])) {
    // define the list of fields
    $fields = array('display_name', 'last', 'suburb', 'state', 'user_type', 'active');
    $conditions = array();
    // loop through the defined fields
    foreach($fields as $field){
        // if the field is set and not empty
        if(isset($_POST[$field]) && $_POST[$field] != '') {
            // create a new condition while escaping the value inputed by the user (SQL Injection)
            $conditions[] = "`$field` LIKE '%".mysql_real_escape_string($_POST[$field])."%'";
        }
    }
    // builds the query
    $query = "SELECT display_name, first, last, suburb, state, user_type, active FROM nfw_users ";
    // if there are conditions defined
    if(count($conditions) > 0) {
        // append the conditions
        $query .= "WHERE " . implode (' AND ', $conditions) .""; // you can   change to 'OR', but I suggest to apply the filters cumulative
    }
    else {
        echo "No records found";
    }
    $result = mysql_query($query);
    $score = mysql_fetch_assoc($result);
}
?>

这是 HTML 表单

<form method="post" action="index.php">
            <tr>
                <td>Name:</td>
                <td><input type="text" name="display_name" /></td>
            </tr>
            <tr>
                <td>Street:</td>
                <td><input type="text" name="last" /></td>
            </tr>
            <tr>
                <td>Suburb:</td>
                <td><input type="text" name="suburb" /></td>
            </tr>
            <tr>
                <td>State:</td>
                <td>
                    <select name="state">
                      <option>
                      <option value="qld">QLD</option>
                      <option value="sa">SA</option>
                      <option value="nt">NT</option>
                      <option value="wa">WA</option>
                      <option value="vic">VIC</option>
                      <option value="tas">TAS</option>
                      <option value="act">ACT</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Type:</td>
                <td>
                    <select name="user_type">
                      <option>
                      <option value="franchise">Franchisee</option>
                      <option value="regional">Regional</option>
                      <option value="state">State</option>
                      <option value="national">National</option>
                      <option value="office">Headoffice Staff</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Active:</td>
                 <td>
                    <select name="active">
                      <option></option>
                      <option value="1">Active</option>
                      <option value="0">Not Active</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="submit" name="submit" value="Search" /></td>
            </tr>
        </form>
<form method="post" action="index.php">
            <tr>
                <td>Name:</td>
                <td><input type="text" name="display_name" /></td>
            </tr>
            <tr>
                <td>Street:</td>
                <td><input type="text" name="last" /></td>
            </tr>
            <tr>
                <td>Suburb:</td>
                <td><input type="text" name="suburb" /></td>
            </tr>
            <tr>
                <td>State:</td>
                <td>
                    <select name="state">
                      <option>
                      <option value="qld">QLD</option>
                      <option value="sa">SA</option>
                      <option value="nt">NT</option>
                      <option value="wa">WA</option>
                      <option value="vic">VIC</option>
                      <option value="tas">TAS</option>
                      <option value="act">ACT</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Type:</td>
                <td>
                    <select name="user_type">
                      <option>
                      <option value="franchise">Franchisee</option>
                      <option value="regional">Regional</option>
                      <option value="state">State</option>
                      <option value="national">National</option>
                      <option value="office">Headoffice Staff</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>Active:</td>
                 <td>
                    <select name="active">
                      <option></option>
                      <option value="1">Active</option>
                      <option value="0">Not Active</option>
                    </select>
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="submit" name="submit" value="Search" /></td>
            </tr>
        </form>

这是打印到表格中的结果

<?php if(isset($score)){
while($score=mysql_fetch_assoc($result)){
      $display_name = $score['display_name'];
      $lastname = $score['last'];
      $state = $score['state'];
      $active = $score['active'];
      if ($active=='1') {
        $activeother = "<i class='fa fa-check' style='color:green;'></i>";
      }
      else {
        $activeother = "<i class='fa fa-times' style='color:red;'></i>";
      }
?>
<?php
$content = "<tr><td>" . $score['display_name'] . "</td><td>" . $score['first'] . "</td><td>" . $score['last'] . "  </td><td>" . $score['email'] . " </td><td> " . $score['mobile'] . " </td><td> " . $score['landline'] . "</td><td>$activeother</td><td> " . $score['user_type'] . "</td><td> " . date('d-m-Y', strtotime($score['date_join'])) . "</td><td class='invoicing-columns'><a class='btn btn-yellow' href='view-invoices.php?id=" . $score['id_num'] . "'><i class='fa fa-eye'></i></a></td><td class='invoicing-columns'><a class='btn btn-red' href='del-customers.php?id=" . $score['id_num'] . "' onclick='return check();' class='delete'><i class='fa fa-minus-circle'></i></a></td></tr>";
echo $content;
}}
?>
如果我

的代码正确,可能会出现问题:在这里,您实际上获取了第一行。

$result = mysql_query($query);
$score = mysql_fetch_assoc($result);

然后似乎你只是跳过它并循环:

if(isset($score)){
while($score=mysql_fetch_assoc($result)){

你真正想做的是:

$result = mysql_query($query);
if (!$result) {
  //TODO: Query error handling
}
// This is how you check for results count
if (mysql_num_rows($result) == 0) {
  while ($score = mysql_fetch_assoc($result)) {
   //Here you go with result
  }
}

您也可以查看此手册链接作为参考。

接下来要检查,从查询中获取确切的字符串,然后从phpMyAdmin尝试。在执行查询时,请确保使用与代码相同的用户。

还有一件事,您正在使用的扩展已被长期弃用,您应该考虑切换到MySQLi或PDO_MySQL