php / mysql – подготовленная в PDO вставка, не работает, и никаких сообщений об ошибках

У меня действительно нет представления о том, что с этим делать сейчас, я часами смотрю на это и заставляю его перезаписывать .. я не могу заставить его работать !.

require_once("Abstracts/DBManager.php"); require_once("UI/UI.Package.php"); class BlogDBM extends DBManager { private $table = "blog_records"; function saveRecord($title,$url,$desc,$feedId,$pubDate) { $PDO = $this->db->connect(); try { $query = $PDO->prepare(" INSERT INTO ".$this->table." (title,url,desc,feed_id,pubdate) VALUES (:title,:url,:desc,:feed_id,:pubdate)"); $query->bindParam(":title", $title); $query->bindParam(":url", $url); $query->bindParam(":desc", $desc); $query->bindParam(":feed_id", $feedId, PDO::PARAM_INT); $query->bindParam(":pubdate", $pubDate, PDO::PARAM_INT); $query->execute(); //return $PDO->lastInsertId(); } catch(PDOException $e) { echo "Error " . $e->getMessage(); } $PDO = NULL; } } 

Solutions Collecting From Web of "php / mysql – подготовленная в PDO вставка, не работает, и никаких сообщений об ошибках"

Я почти уверен, что mySQL дросселирует имя поля desc – это зарезервированное слово. Вы должны были бы поместить его в кавычки “ или, лучше, измените имя поля.

Что касается отчета об ошибках, используйте метод errorInfo . Вы можете заставить PDO фактически выводить результат неудавшегося запроса в исключение, но поведение по умолчанию – я думаю, – это исключение исключения, только если запрос не может быть выполнен вообще, но он не сбой, если запрос неисправен.

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

Чтобы остановить отказ PDO от отказа, вы можете установить режим ошибки в PDO-соединении.

 $dbh = new PDO(); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

Существует также PDO::ERRMODE_WARNING если вы хотите ошибок, но продолжаете.

Я также столкнулся с этой ошибкой.

Я использовал print_r($con->errorInfo()); он дает мне 0000 в 0th ключе массива.

Затем я сопоставил все имена столбцов и понял, что я использую неправильное имя поля.

Это спасает мой день.

Это также происходит, когда вы используете PDOStatement::bindValue() с PDO::PARAM_BOOL . Решение: просто переключитесь на PDO::PARAM_INT .

Подобные проблемы могут возникать, когда кто-то поворачивается / уходит с автоинкремента БД в поле основного идентификатора.

я боролся с этой тихой вставкой на этой неделе. и вот решение, которое сработало для меня. я не вызывал фиксацию транзакции, поэтому вставка была помещена в ожидающее состояние, но никогда не была завершена в базе данных – следовательно, ошибки не было. это было более сложным, потому что PDP db-обертка в этом проекте является статическим классом, поэтому он не закрывается автоматически

Решение: обязательно вызовите фиксацию на дескрипторе PDO после действий вставки / обновления / удаления или на закрытии страницы.

$PDO->exec("COMMIT;");