我的PDO请求有什么问题?
我想做一个简单的函数插入数组与我的数据库与PDO。我的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设置&连接
<?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)
逃避你的表和列名,我终于找到了解决办法,第一我让ERRCODE的的var_dump(不知道SRY之前此功能)
var_dump($req->errorCode());
他返回错误代码:42S02
因此,对于修复一个简单的解决方案只需要添加:
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
感谢您的帮助
什么是错误信息字符串? – 2014-09-20 22:16:40
试着用`
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');
}
那些':'应该生成[命名参数](http://php.net/manual/en/pdo.prepare.php#refsect1-pdo.prepare-examples ),我敢肯定。 – VMai 2014-09-20 21:36:50
我有这个请求相同的问题。关于sql注入我认为这是安全的,我用“:”绑定值与数组键($阵列) – 2014-09-20 21:38:35
好点的家伙:P谢谢,没有想到.. – 2014-09-20 21:51:03
传递给'prepare'的实际SQL字符串是什么? – 2014-09-20 21:01:34
默认情况下,PDO将默认为错误。设置你的'$ bdd'对象在连接后在'database.php'中引发异常:'$ bdd-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);' – 2014-09-20 21:02:48
'... VALUES(“'。$ '')');'你缺少''(引号)的值 – 2014-09-20 21:03:17