Это так озадачило, я ДОЛЖЕН пропустить что-то простое. У меня есть запрос, который проверяет, существует ли уже существующая транзакция, чтобы предотвратить дублирование. Вот код:
function isaDupe($portableDB, $transactArray) { $ref = $transactArray["reference"]; $date = $transactArray["qdate"]; $time = $transactArray["time"]; //prints the query so I can run by hand to test print "SELECT `counter` FROM transactions WHERE (`reference` = '$ref' AND `qdate` = '$date' AND `time` = '$time') "; if ($dupeSelectStmt = $portableDB->prepare("SELECT `counter` FROM transactions WHERE (`reference` = ? AND `qdate` = ? AND `time` = ?)")) { $dupeSelectStmt->bind_param('sss',$ref, $date, $time); $dupeSelectStmt->bind_result($counter); $dupeSelectStmt->execute(); while ($dupeSelectStmt->fetch()) { break; } $numRows = $portableDB->affected_rows; if ($numRows > 0) return TRUE; else if ($numRows == -1) { print " ERROR: "; print_r($portableDB->error); print_r($dupeSelectStmt->error); return FALSE; } else return FALSE; } }
-Если я запускаю запрос вручную через Workbench на том же сервере, я получаю 24 строки.
– Это то же самое, если я готовлю, устанавливаю и выполняю инструкцию вручную.
-affected_rows возвращает -1
– то же самое, если я делаю num_rows в заявлении
– на объекте Statement или MySQLi нет ошибки.
Если я помещаю печать в оператор fetch (), она печатает данные одной строки
Если я сохраню выбранные строки в массив и подсчитаю результаты, это 1
-Я пробовал работать с каждой переменной отдельно, то же самое.
-другие запросы на одном сервере (черт, на одном и том же объекте MySQLi) работают нормально. ВЫБОРЫ, ОБНОВЛЕНИЯ И ВСТАВКИ.