2016-10-18 1 views
-4

Я новичок в PHP, а также в mysql. Я застрял в этой проблеме. Я хочу напечатать ошибку, если элементы не найдены в базе данных.Как дать ошибку, когда элементы не найдены в базе данных (PHP и Mysql)

пыльник мой код для него:

$searchParam = '%' . $_GET['q'] . '%'; 
$moment = microtime(true); 
$stmt = $db->prepare('SELECT * FROM product WHERE (serial_number LIKE ? OR name LIKE ?) ORDER BY production_date D$'); //fixed 
$stmt->execute(array($searchParam, $searchParam)); 
$products = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$queryTime = microtime(true) - $moment; 


$output = array(
     'query_time' => $queryTime, 
     'products' => $products 
); 

die(json_encode($output)); 

Большое вам спасибо за вашу помощь.

+0

, это означает, что если продукт = 0, то вы можете показать сообщение об ошибке, как «продукт еще не найден»? –

ответ

0

Я не знаю, что вы точно хотите достичь, и если вы разборе результат в веб-интерфейсе, но это простое решение для Вашего случая:

$searchParam = '%' . $_GET['q'] . '%'; 
$moment = microtime(true); 
$stmt = $db->prepare('SELECT * FROM product WHERE (serial_number LIKE ? OR name LIKE ?) ORDER BY production_date D$ 
$stmt->execute(array($searchParam, $searchParam)); 
$products = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$queryTime = microtime(true) - $moment; 

if($products) { 
    $output = array(
      'query_time' => $queryTime, 
      'products' => $products, 
      'success' => true 
    ); 
} 
else { 
    $output = array(
     'query_time' => $queryTime, 
     'error' => 'Some error message', 
     'success' => false 
    ); 
} 

die(json_encode($output)); 

Для лучшего ответа дать нам некоторые дополнительную информацию о том, что вы делаете с ответом от php и почему он находится в формате json.

+0

Я выполняю функцию поиска. (https://github.com/murjam/i706-lotsofdata-search). На данный момент, когда элементы не найдены, веб-приложение все еще загружается и продолжает искать его. Я просто хочу остановиться или даже лучше, если он выдаст пользователю ошибки или анонсы. –

0

Вы можете просто подсчитать количество элементов, возвращаемых в массиве $ products.

if (count($products) == 0) { 
    echo 'No matches found'; 
} 

Все это происходит после проверки того, удалось ли выполнить запрос в первую очередь. Если запрос не выполняется, переменные могут выйти из строя, и этот оператор if завершится с ошибкой. Но это, скорее всего, ваше решение для проверки того, не найдены ли строки в инструкции select.

0

Попробуйте это

<?php 
$searchParam = '%' . $_GET['q'] . '%'; 
$moment = microtime(true); 
$stmt = $db->prepare('SELECT * FROM product WHERE (serial_number LIKE ? OR name LIKE ?) ORDER BY production_date D$'); //fixed 
$stmt->execute(array($searchParam, $searchParam)); 

$number_of_rows = $stmt->fetchColumn(); 

if($number_of_rows > 0) { 
    $products = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    $queryTime = microtime(true) - $moment; 

    $output = array(
      'query_time' => $queryTime, 
      'products' => $products 
    ); 
} else { 
    $output = array(
      'query_time' => $queryTime, 
      'products' => $products, 
      'success' => false, 
      'error_msg' => 'Product not found.', 
    ); 
} 
die(json_encode($output)); 
?> 
Смежные вопросы