SQL错误:参数号无效:未定义参数

时间:2017-04-02 17:11:19

标签: php mysql pdo parameters

这是我的代码。我相信它不会将值绑定到参数上。但我不知道为什么:

public function create($fields)
    {
        $keys = array_keys($fields);
        $values = null;
        $x = 1;

        foreach($fields as $field) {
            $values .= '?';
            if ($x < count($fields)) {
                $values .= ', ';
            }
            $x++;
        }

        $sql = "INSERT INTO users (`" . implode('`, `', $keys) . "`) VALUES ({$values})";

        if(!$this->db->prepare($sql)->execute($fields)) {
            return true;
        }
        return false;
    }

关于index.php:

$user = new User();
$user->create(array(
                'name' => 'test',
                'username' => 'test2',
                'email' => 'test@gmail.com'
            ));

为什么我的值没有绑定参数?这是完整的错误:

  

执行'INSERT INTO用户(name)时发生异常,   usernameemail)VALUES(?,?,?)'与params [“test”,“test2”,   “test@gmail.com”]:

     

SQLSTATE [HY093]:参数号无效:参数未定义

2 个答案:

答案 0 :(得分:0)

如果您使用 ? 方式查询,那么您在params中发送的数组可能没有密钥我认为!

编辑:执行 execute(array_values($fields)) ,当有 username = :username, pass = :pass 等参数时,您必须使用密钥

答案 1 :(得分:0)

试试这个


    public function create($fields)
        {
            $keys ='';
            $values = '';
            foreach($fields as $k=>$field) {
                $keys[] = $k;
                $values[] = $field;
            }
            $sql = "INSERT INTO users (".implode(',',$keys).") VALUES ("'".implode ("','",$values)."'")";
            if(!$this->db->prepare($sql)->execute($fields)) {
                return true;
            }
            return false;
        }