没有错误,var转换看起来正确,不会插入

时间:2015-06-29 20:31:57

标签: php pdo

我想知道是否有人对此错误的含义有任何想法

  

PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:   绑定变量的数量与令牌Database.php的数量不匹配   在第95行

第83 - 97行database.php

    ksort($data);

    //$fieldNames = implode(', ', array_keys($data));   /// to be tested
    $fieldNames = implode('`, `', array_keys($data));
    $fieldValues = ':' . implode(', :', array_keys($data));

    $sth = $WIdb->prepare("INSERT INTO $table (`$fieldNames`) VALUES ($fieldValues)");

    foreach ($data as $key => $value) {
        $sth->bindValue(":$key", $value);
    }

    $sth->execute();
    $sth->closeCursor();

我的数据库插入

$this->WIdb->insert("WI_Members", array(
            ":email"             => $user['email'],
            ":username"          => strip_tags($user['username']),
            ":password"          => $this->hashPassword($user['password']),
            ":full_name"       => strip_tags($user['full_name']),
            ":birthday"          => $full_birthday,
            ":gender"            => $user['gender'],
            ":country"           => $user['country'],
            ":confirmed"         => $confirmed,
            ":confirmation_key"  => $key,
            ":register_date"     => date("Y-m-d")     
        ));  

尝试重新编码我的网站,停止sql注入,它通过了所有验证,

我做了VAR DUMP

["email"]=>
  string(21) "test@googlemail.com"
  ["username"]=>
  string(12) "warner"
  ["full_name"]=>
  string(6) "Jules "
  ["password"]=>
  string(128) "db0773097ac0e01005f698bc50488524f3bea68b545ad35aa8ac73ce5c3b447b82aebcab45763a650a9195caf11cf9e7fd3f6f67265f371702ef07128bb65cdf"
  ["confirm_password"]=>
  string(128) "db0773097ac0e01005f698bc50488524f3bea68b545ad35aa8ac73ce5c3b447b82aebcab45763a650a9195caf11cf9e7fd3f6f67265f371702ef07128bb65cdf"
  ["gender"]=>
  string(1) "m"
  ["birthmonth"]=>
  string(2) "02"
  ["birthday"]=>
  string(2) "22"
  ["birthyear"]=>
  string(4) "1980"
  ["country"]=>
  string(14) "United Kingdom"
  ["bot_sum"]=>
  string(2) "10"

我看了几个论坛, 我已经尝试了一些比特,似乎什么都没有用,我24小时都在努力解决这个问题,所以我想在这里尝试新鲜可能会帮助lol

感谢大家的时间

1 个答案:

答案 0 :(得分:0)

您的错误意味着查询中的项目数与值数组中的项目数不匹配。

您正在声明一定数量的参数,但数组的值与长度不同。

检查它们是否匹配并相应地修复以解决问题。