Я получаю необычное поведение при использовании PHP/PDO и INSERT. Вот некоторые примеры кода:Использование PHP PDO, необычное поведение с исключениями rowCount и catching
foreach ($all_users as $this_user) {
try {
$stmt = $db->prepare('INSERT INTO fav_colors (name, color, whattime) VALUES (:name, :color, :whattime)');
$stmt->bindValue(':name', $this_user[name]);
$stmt->bindValue(':color', $this_user[color]);
$stmt->bindValue(':whattime', $this_user[time]);
$stmt->execute();
$count = $stmt->rowCount();
} catch(PDOException $e) { catchMySQLerror($e->getMessage()); }
if ($count == 1) {
echo "Successful write to table";
} elseif ($count == 0) {
echo "ERROR writing row to table";
}
}
Допустим, у меня есть 10 имен/цвета для вставки и времена формат DATETIME (2016-01-01 12:00:00). У меня есть цикл вокруг этого кода, и после кода я проверяю $ count, чтобы убедиться, что вставка работает нормально.
Вот моя проблема. Одна из 10 вставок, по какой-то причине $ write_time была пустой. mySQL сгенерировал ошибку (не может быть null). Моя пользовательская функция catchMySQLerror записывает ошибку в таблицу и отправляет мне по электронной почте. Это было так, но $ count был еще 1 для этой записи, и, согласно этому, все было в порядке, хотя запись не вставлялась.
Так же моя проблема с try/catch, которую я использую здесь, чтобы поймать исключение? Как я могу добавить что-то, где я могу лучше справиться с ошибкой в коде? Я знаю, что я могу добавить больше строк после строки catchMySQLerror и работать с ошибкой таким образом. Это то, что я сделал. Но я хотел бы обработать ошибку, используя if/else, и с подходом, о котором я только что упомянул, я могу справиться с ошибкой ... нет, если это было успешным.
UPDATE: Я редактировал код, чтобы показать, как я использую $ кол
http://php.net/manual/en/pdo.error-handling.php, если вы не сделали этого. –
, если проблема связана с '$ write_time', не кажется ли вам, что имеет смысл показать, как определяется' $ write_time' .. в любом случае, звучит как одна ошибка, вы должны показать код цикла. –
Как вы определяете '$ write_time' в своем коде? Также обратите внимание, что вам нужно привязать параметры только один раз. После этого вы можете просто изменить свои переменные и выполнить. –