【发布时间】:2016-04-08 23:06:02
【问题描述】:
你好是使用这个 pdo php 类 https://github.com/indieteq/PHP-MySQL-PDO-Database-Class
我用它来连接 db 和 crud,直到现在所有工作都正常工作
但是当我运行此代码时,不断收到此错误:SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
除此之外,所有绑定都可以正常工作:
function generateRandomString()
{
$length = 5;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i ++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$key = $randomString;
$setto = false;
while ($setto == false) {
$result = $this->db->query('SELECT `vkey` FROM `polls` WHERE `vkey`=:vkey', array(
'vkey' => $key
));
if (count($result) > 0) {
$randomString = '';
for ($i = 0; $i < $length; $i ++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$key = $randomString;
} else {
$setto = true;
}
}
echo $key;
return $key;
}
我尝试随机搅拌并在数据库中检查它,然后再使用该代码。
这是我的完整代码` 函数 __construct() { 父::__construct(); }
function addpoll($args, $questions)
{
for ($i = 0; $i < 2 + $questions; $i ++) {
$args[$i] = parent::escape($args[$i]);
}
$args[1] = parent::convertHashtags($args[1]);
$this->db->bind('title', $args[0]);
$this->db->bind('description', $args[1]);
$this->db->bind('answer1', $args[2]);
$this->db->bind('answer2', $args[2]);
$param = '';
if ($questions > 2) {
for ($i = 3; $i < $questions + 1; $i ++) {
$param = $param . ':answer' . $i . ',';
$this->db->bind('answer' . $i, $args[$i]);
}
if (10 - $questions > 0) {
$count = 0;
while (10 - $questions > $count) {
$param = $param . ' \'\' ,';
$count ++;
}
}
} else {
$count = 0;
while (10 - $questions > $count) {
$param = $param . ' \'\' ,';
$count ++;
}
}
$this->db->bind('subject', $args[$questions + 1]);
$sql = 'INSERT INTO `polls` (`id`, `title`, `about`, `answer1`, `answer2`, `answer3`, `answer4`, `answer5`, `answer6`, `answer7`, `answer8`, `answer9`, `answer10`, `mode`, `confirmation`, `who`, `password`, `confirmed`, `createdate`, `expiredate`,`subject`,`pkey`) VALUES (NULL,:title, :description ,:answer1 ,:answer2,';
$param = $param . ' 0 , 0 , 0 , \'\' , 0 ,' . time() . ' ,';
$settings = time() + ($args[$questions + 3] * 86400) . ',:subject , ';
$sql = $sql . $param . $settings . '\'' . $this->generateRandomString() . '\'' . ')';
echo $sql;
$this->db->query($sql);
}
private function getsub($id)
{
$result = $this->db->query('SELECT * FROM `subject` WHERE id=:sid ', array(
'sid' => $id
));
if (count($result) == 1) {
return $id;
}
return 1;
}
function generateRandomString()
{
$length = 5;
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i ++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$key = $randomString;
$setto = false;
while ($setto == false) {
$result = $this->db->query('SELECT `vkey` FROM `polls` WHERE `id`=:id', array(
'id' => $key
));
if (count($result) > 0) {
$randomString = '';
for ($i = 0; $i < $length; $i ++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
$key = $randomString;
} else {
$setto = true;
}
}
echo $key;
return $key;
}
` 我尝试了不同的关键字,例如 :vkey2 或.. 并回显所有变量 谢谢
【问题讨论】:
-
你确定是这个查询导致了这个错误吗?错误含义是参数的数量不等于占位符的数量。顺便说一句,我希望
echo $key仅用于调试目的。 -
是的,我确定。我回显所有变量一切正常