2015-02-28 8 views
0

Я задал этот вопрос с небольшим знанием в PHP и SQL, решение моего ответа состояло в том, чтобы обернуть переменную как это '$ PLATE_NUMBER', поскольку это строка. Об этом также говорится в первом комментарии ниже.SQL-запрос не может получить правильное значение из базы данных?

Как вы можете видеть из кода, когда я нажимаю поиск, я получаю «Не найдено результатов поиска!» В моем запросе что-то не так, потому что, если я изменю это на

"SELECT * FROM `tires` WHERE PLATE_NUMBER LIKE '%$PLATE_NUMBER%'" 

Затем я получаю данные внутри базы данных mySQL?

КПП: Я также тестировал оба запроса в mySQL, и он работает. Так в чем проблема? Я хочу, чтобы искать, например, «CV33610», и получить строку из моей базы данных ..

$query = mysql_query("SELECT * FROM `tires` WHERE PLATE_NUMBER='%$PLATE_NUMBER%'", $connection) or die("Could not search!"); 
$count = mysql_num_rows($query); // Returns an integer of how many rows in your table that is picked up. 

if($count == 0){ 

    $output = 'There was no search results!'; 

} else { 

    // Collect the data into an array 
    while($row = mysql_fetch_array($query)){ 

     $platenumber = $row['PLATE_NUMBER']; 
     $id = $row['id']; 

     // View the parameters to the screen. 
     $output .= '<div>'.$id.' '.$platenumber.'</div>'; 

    } // End while statement 
} // End if statement 
+1

Это похоже на уязвимость SQL-инъекции ... – David

ответ

0

Поскольку мы имеем дело со строковым значением CV33610, вам необходимо обернуть переменную $PLATE_NUMBER, используя одинарные кавычки.

$query = mysql_query("SELECT * FROM `tires` 
WHERE PLATE_NUMBER = '$PLATE_NUMBER'", $connection) 
or die(mysql_error()); 

Прибавив or die(mysql_error()) в ваш запрос был бы сигнализировал ошибку синтаксиса.

Sidenote:


Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

0

$ PLATE_NUMBER должен быть exanct записи в PLATE_NUMBER.

$query = mysql_query("SELECT * FROM `tires` WHERE PLATE_NUMBER = $PLATE_NUMBER", $connection) or die("Could not search!"); 

$ PLATE_NUMBER просто должны быть некоторые из текста в PLATE_NUMBER

$query = mysql_query("SELECT * FROM `tires` WHERE PLATE_NUMBER LIKE CONCAT('%' . $PLATE_NUMBER . '%')", $connection) or die("Could not search!"); 

LIKE ищет строки, где PLATE_NUMER может иметь что-то до $ PLATE_NUMBER и что-то после. (%) используется, если любой текст может стоять до или после заданной переменной.

Должно быть выполнено, CONCAT собирает переменные, отправляемые на него. Поэтому он будет выглядеть корректно, когда MySQL его читает.

Вы также должны использовать consiser, используя инструкции PDO или MySQLi для создания запросов MySQL на своем веб-сайте, поскольку обычный mysql не является безопасным вообще.

+0

Конкат, как вы выразились, не будет работать. Интерполяция OP действительна в PHP. –

+0

Вы пробовали запрос, прежде чем говорить об этом? ^^ – Djip

0

Большое спасибо за помощь в решении этой проблемы. В конце концов, я выяснил, в чем проблема.Единственная проблема была в этом

ПРОБЛЕМА: <input type="text" name="search" placeholder="Search for tires...."/>

Решение: <input type="text" name="PLATE_NUMBER" placeholder="Search for tires...."/>

имеют хороший день ребята !!