PDO - тест пустых результатов

0

У меня есть запрос, который должен искать запись. Если он не находится в базе данных, введите данные. В противном случае он возвращает данные и может обновлять любые поля. Если есть запись, она будет только одна. Это отлично работает, если запись находится в таблице. Но я попытался проверить пустые строки, сделать row_count и т.д. И, похоже, не работает. Прямо сейчас у меня есть это в коде (для очистки информации таблицы компаний):

$query1  = " SELECT Number, Notes, Qty1, Qty2  FROM test.notes ";
$query1 .= " WHERE Number = '$searchnumber' ";

$result1 = $conn1->query($query1);
    $conn1 = null;
    if($result1==null)
    {
        echo "Result is null</p>\n";
        return 0;
    }
    else
    {           
        echo "Result is not null</p>\n";
        return $result1;
    }

Если я выберу, если проверить, что я, кажется, вернусь, это если он вернет правильные значения. Если он не найден, результат, похоже, является самой строкой запроса. Проверка не работает. Вероятно, потому что он возвращает строку запроса, если она не найдена.

Я знаю, что это просто, но просто не нашел.

  • 0
    Пожалуйста, оберните имена столбцов и таблиц в кавычки. Это предотвратит ошибку, называемую зарезервированными словами mysql.
  • 0
    Почему бы вам не повторить результат и проверить его? Вы также можете использовать fetchAll
Показать ещё 3 комментария
Теги:
pdo

3 ответа

0

После некоторых проб и ошибок я получил это для работы:

    $result1 = $conn1->query($query1);
    $count = $result1->fetchColumn();
    if($count == "")
    {
    //          echo "Result is null</p>\n";
        return "0";
    }
    else
    {           
    //          echo "Result is not null</p>\n";
        $result1 = $conn1->query($query1);
        return $result1;
    }

Мне пришлось изменить настройку, чтобы включить:

$conn1->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);

Наверное, это не чистый способ, но сейчас он работает. Спасибо за помощь.

0

Я предлагаю сделать что-то вроде этого:

Установите запрос

$query1  = " SELECT Number, Notes, Qty1, Qty2  FROM test.notes ";
$query1 .= " WHERE Number = '$searchnumber' ";

Посмотрите, есть ли результат для запроса, и нет ошибки

if ($res = $conn1->query($sql)) {

    /* Check the number of rows that match the SELECT statement */
  if ($res->fetchColumn() > 0) {

        /* Issue the real SELECT statement and work with the results */
         $sql = "SELECT name FROM fruit WHERE calories > 100";
       foreach ($conn->query($sql) as $row) {
           print "Name: " .  $row['NAME'] . "\n";
         }
    }
    /* No rows matched -- do something else */
  else {
      print "No rows matched the query.";
    }
}
  • 0
    Неустранимая ошибка: вызов неопределенного метода PDO :: execute ()
  • 0
    @ Майкл - Обновил мой ответ.
0
// if available  in  database
   $query="SELECT Number, Notes, Qty1, Qty2  FROM test.notes WHERE Number='".$searchnumber."'";
    $qnt =   $conn1->query($query);
     $coun = count($qnt->fetchAll());

          if($coun > 0){
        // available 
         echo "Result is available</p>\n";

          }else{
            //not available
            echo "Result is not available</p>\n";

          }

Думаю, тебе нужно что-то подобное.

если это не работает нормально, попробуйте еще один подход

 $queryi = $conn1->prepare("SELECT Number, Notes, Qty1, Qty2  FROM test.notes WHERE Number='".$searchnumber."' ");

             $queryi->execute();
            $qn=  $queryi->fetchAll(PDO::FETCH_ASSOC);



            foreach ($qn as $row => $data) {

                 $in_use = $data['Number'];

               //echo $in_use ;


              }

           // evaluate
           if($in_use == NULL){
              //not avilable

            }else{
            // available

             }
  • 0
    Эффект выполнения fetchAll, похоже, разрушает данные $ qnt. Таким образом, даже если $ count вернется назад и логика сработает, в $ qnt сейчас нет данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню