【问题标题】:mysql and php %like% query. Works in phpmyadmin but different results phpmysql 和 php %like% 查询。在 phpmyadmin 中工作,但结果不同 php
【发布时间】:2017-08-05 05:32:47
【问题描述】:

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

“display_name”表单域和“last”表单域显示的结果与直接进入 phpmyadmin 的结果不同。

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

例如。如果某人的全名是 nathan spencer,并且我将 spencer 放入“最后一个”表单字段,它只会显示 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); 字符串之前提供$query 的值?
  • string(142) "SELECT display_name, first, last,郊区, state, user_type, active FROM nfw_users WHERE display_name LIKE '%nick%' AND last LIKE '%smith%'"
  • 您似乎做错了检查并循环了结果

标签: php mysql


【解决方案1】:

如果我的代码正确,则可能存在问题: 在这里,您实际上获取了第一行。

$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
  }
}

您也可以查看this manual link 作为参考。

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

还有一件事,您使用的扩展程序已被长期弃用,您应该考虑切换到MySQLiPDO_MySQL

【讨论】:

  • 走开了,吃过晚饭。回来,查看我的代码和您的解决方案,并在 5 分钟内完成。非常感谢您的帮助。全部修复:)
猜你喜欢
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2013-03-29
  • 1970-01-01
  • 2017-07-07
  • 2019-03-21
  • 2020-02-15
相关资源
最近更新 更多