簡體   English   中英

mysql和php%like%查詢。 可在phpmyadmin中工作,但php的結果不同

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

我有一些搜索字段,它們跨幾個不同的表。

“ display_name”表單字段和“ last”表單字段顯示的結果不同,然后直接在phpmyadmin中執行。

如果我在我的php腳本中回顯mysql查詢並將其粘貼到phpmyadmin中。 它列出了正確的結果。 但是,在php / html頁面上卻沒有列出相同的內容。

例如。 如果某人的全名是內森·斯潘塞(Nathan 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);
$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中嘗試它。 執行查詢時,請確保使用與代碼相同的用戶。

還有一件事,您正在使用的擴展名已經過時了,您應該考慮切換到MySQLiPDO_MySQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM