我的PDO请求有什么问题?

时间:2014-09-20 20:59:35

标签: php mysql 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设置&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)

2 个答案:

答案 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');
}