Мой запрос SQl возвращает 0 строк, но когда я запускаю тот же запрос в моем phpmyadmin, он возвращает 2 строки.
Мой код выглядит так:

    <?php 
        require("mysql_config.php");    

        // *******************************************************************

        if(isset($_POST['GUID'])){
            $queryw = "SELECT * FROM wav_files WHERE GUID = :guid AND (Name = '' OR Name IS NULL) ";
            $query_params = array(':guid' => $_POST['GUID']);
            try{ 
                $stmtw = $db->prepare($queryw); 
                $result = $stmtw->execute($query_params); 
            } 
            catch(PDOException $ex){ die("Failed to run query 01: " . $ex->getMessage()); } 
            $files = array();
            while($row = $stmtw->fetch()) {
                $file = array();
                $file['id'] = $row['ID'];
                $file['name'] = $row['Name'];
                $file['filename'] = $row['Filename'];
                array_push($files, $file);
            }
            echo json_encode($files);
        }

    ?>

Я проверил, что $_POST['GUID'] содержит значение, и оно есть. Также этот код возвращает пустой объект, потому что выборка не дала результатов.

$stmtw->rowCount() возвращает 0

Когда я удаляю условия и параметры WHERE, запрос работает. Кто-нибудь знает, почему он возвращает 0 строк, а в БД 2?

var_dump($query_params) возвращает:

<pre class='xdebug-var-dump' dir='ltr'>
<small>C:\localhost\www\get_wavfiles.php:22:</small>
<b>array</b> <i>(size=1)</i>
  ':guid' <font color='#888a85'>=&gt;</font> <small>string</small> <font color='#cc0000'>'{53905-3534-5345}'</font> <i>(length=17)</i>
</pre>
-1
Jbadminton 13 Дек 2019 в 13:24
Комментарии не подлежат расширенному обсуждению; этот разговор был перешел в чат.
 – 
Samuel Liew
13 Дек 2019 в 14:17
1
У меня есть очень удобный учебник Как отлаживать взаимодействия базы данных с PDO, который определенно поможет вам найти проблему. Это уже помогло многим людям найти несоответствие между входными данными и базой данных.
 – 
Your Common Sense
13 Дек 2019 в 14:33

2 ответа

Здесь вы можете использовать UNION ALL с EXISTS:

SELECT * 
FROM customer
WHERE A='B'
UNION ALL
SELECT * 
FROM customer
WHERE A='C' AND NOT EXISTS (
    SELECT 1
    FROM customer
    WHERE A='B'
)
-1
Dharman 18 Дек 2019 в 19:54

Пытаться

SELECT * FROM wav_files WHERE GUID = :guid AND (Name = '' OR Name is NULL) ";

Или

SELECT * FROM wav_files WHERE GUID = :guid AND ifnull(Name,'') = '' ";

= null не работает так, как вы используете.

-1
Devsi Odedra 13 Дек 2019 в 13:30
Обновлено, но это не решение
 – 
Jbadminton
13 Дек 2019 в 13:32
Какие проблемы еще не решены?
 – 
Ankit Sharma
13 Дек 2019 в 13:33
Запрос возвращает 0 строк, в то время как это должно быть 2, и когда я удаляю все параметры, он возвращает 99 строк (все)
 – 
Jbadminton
13 Дек 2019 в 13:34
1
Можете ли вы print_r ($ queryw)? и скопируйте запрос и запустите в mysql проверку, правильно ли он работает.
 – 
sagar
13 Дек 2019 в 13:35
Вы не передаете руководство должным образом
 – 
Ankit Sharma
13 Дек 2019 в 13:47