我正在尝试使用PDO在我的数据库中为插入数组创建一个简单的函数。
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . '/include/config/database.php');
/**
* Database
*/
class Database {
function __construct()
{
}
function insertArray($array, $table)
{
global $bdd;
$i = 1;
foreach ($array as $key => $currVal)
{
if ($i == count($array))
$keyVal .= ':'.$key;
else
$keyVal .= ':'.$key.', ';
$i++;
}
$arrayKeyValue = implode(", ", array_keys($array));
$req = $bdd->prepare('INSERT INTO '.$table.'('.$arrayKeyValue.') VALUES('.$keyVal.')');
$req->execute($array);
die('DONE');
}
}
?>
但是没有插入数据,我在php或pdo错误中没有任何错误......
有人知道我错了什么吗?
感谢
PS:抱歉我的英文不好
SQL设置&amp;连接
<?php
error_reporting(E_ALL);
$bdd = new PDO('mysql:host=localhost;dbname=csgo', 'csgo', 'password removed', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING));
?>
变量内容:
$array
array(5) {
["screen_name"]=>
string(4) "test"
["avatar_big"]=>
string(15) "test_avatar.png"
["avatar_small"]=>
string(16) "small_avatar.png"
["steam_id"]=>
int(991)
["last_connection"]=>
int(156121)
}
$keyVal
string(69) ":screen_name, :avatar_big, :avatar_small, :steam_id, :last_connection"
$arrayKeyValue
string(64) "screen_name, avatar_big, avatar_small, steam_id, last_connection"
SQL请求:
INSERT INTO user(screen_name, avatar_big, avatar_small, steam_id, last_connection) VALUES(:screen_name, :avatar_big, :avatar_small, :steam_id, :last_connection)
答案 0 :(得分:0)
我终于找到了解决方案,首先我做了一个errCode的var_dump(在sry之前不知道这个函数)
var_dump($req->errorCode());
他返回错误代码:42S02
因此,修复一个简单的解决方案只需添加:
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
感谢您的帮助
答案 1 :(得分:-1)
尝试使用`
转义表名和列名function insertArray($array, $table)
{
global $bdd;
$i = 1;
foreach ($array as $key => $currVal)
{
if ($i == count($array))
$keyVal .= ':'.$key;
else
$keyVal .= ':'.$key.', ';
$i++;
}
$arrayKeyValue = "`" . implode("`, `", array_keys($array)) . "`";
$req = $bdd->prepare('INSERT INTO `'.$table.'`('.$arrayKeyValue.') VALUES('.$keyVal.')');
$req->execute($array);
die('DONE');
}