Моя инструкция для вставки не работает, я изучаю PDO и им довольно уверен, что это как-то связано с тем, как im обрабатывает кавычки и двойные кавычки, но ive попробовал множество сценариев, и ни одна из них не работает. Моя основная проблема заключается в том, что я не могу просто напечатать строку, как я мог, с помощью простого старого mysql, если вставка сломалась, im не уверен, что лучший способ устранить проблемы с вставкой с PDO, поскольку это функция, которую я использовал в течение длительного времениPDO insert statement не работает
Позвольте мне показать первый мой код:
$insert_array = array(
"item_date" => "$todays_date",
"item_name" => "$username",
"item_user" => "$item_desc",
"item_description" => "$item_game_type",
"item_rating" => "0",
"total_ratings" => "0"
);
$insert_db = $database->insert_sql("item_table",$insert_array);
// loop through and bind the values in preperation for inserting
foreach ($insert_array as $field => $item) {
$database->bind(':'.$field,$item);
}
//execute the insert
$database->execute();
Вот функции:
// compile list of escaped fieldnames
// will return `user_name`, `user_password_hash`, `user_email`, `user_activation_hash`
function dbFieldList($fields) {
$set = '';
foreach ($fields as $field => $item) {
$set .= "`".$field."`,";
}
return rtrim($set, ',');
}
// compile list of values
// will return :user_name, :user_password_hash, :user_email, :user_activation_hash
function dbValuePList($fields) {
$set = '';
foreach ($fields as $field => $item) {
$set .= ":".$field.",";
}
return rtrim($set, ',');
}
// take data from arrays, clean the values in the
// dbFieldList and dbValuePList functions
// and create the insert query
// example INSERT INTO `users` (`user_id`,`user_name`,`address`) VALUES (:user_id, :user_name)
public function insert_sql($table="item_table",$insert_array="",$debug=false){
$this->query("
INSERT INTO `".$table."`
(". $this->dbFieldList($insert_array) .")
VALUES (". $this->dbValuePList($insert_array) .")
");
}
}
// prepare the query
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
Теперь у меня также есть некоторый код ошибки
if(!$insert_db){
echo "result of prepared insert statement: " . print_r($database->stmt) . "<br /><br />The result of the insert array values to be passed: " . print_r($insert_array) . "<br /><br />";
}
и выход:
PDOStatement Object
(
[queryString] =>
INSERT INTO `item_table`
(`item_date`,`item_name`,`item_user`,`item_description`,`item_rating`,`total_ratings`)
VALUES (:item_date,:item_name,:item_user,:item_description,:item_rating,:total_ratings)
)
Array
(
[item_date] => 2013-12-17 03:19:32
[item_name] => testing
[item_user] => test user
[item_description] => All
[item_rating] => 0
[total_ratings] => 0
)
Так что мой Дилем это я знаю, что вставка не удается, но я не знаю, как проверить, что случилось с моим старым кодом тузд я мог бы использовать mysql_error(); но, поскольку вы можете видеть, что результат выглядит нормально, но это не точная строка, поэтому единственное, что я могу предположить, ошибочно - это контейнеры вокруг массива. Вместо «$ username», возможно, это должно быть «». Username. »Или что-то в этом роде, но ive попробовал кучу вариаций и потерпел неудачу, конечно, есть способ с PDO получить осмысленное сообщение об ошибке или намеренно сделать это будет трудно.
Проверьте [документы PDO на обработку ошибок] (http://www.php.net/manual/en/pdo.error-handling.php). По умолчанию он ошибочно звучит, но вы можете и должны настраивать его для исключения исключений через 'setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION)' –
Запрос, похоже, синтаксически действителен, кстати. –
Что в методах 'bind' и' query'? – Phil