我知道:这已经完成了死亡。但是,相信我,我一直在研究如何解决这个问题。我想要实现的是PDO MySQL数据库封装器,可以与PDO一起使用,我可以将它们合并到我的代码中。我的主要问题来自两个函数,特别是我试图达到的参数的实际绑定。之所以我说两个的功能与一个是相反的,尽管我努力了,但我一直无法发现哪个人正在尝试这个问题。变量的我已经确认它不是变量,这是别的。不过,事实上,我得到这个错误首先意味着东西必须是错误的代码。SQLSTATE [HY093]:无效的参数编号:参数未定义(PDO)
附录A:fetch($table, $columns, $whereArgs)
此功能的目的是简单地读取行。这是通过接受要提取的行的表,以及为了完成特定任务而需要的任何列和where子句来实现的。一旦参数被提交,一个或两个循环被调用,动态地形成查询。
public function fetch($table, $columns, $whereArgs)
{
if ($whereArgs === NULL && $columns === NULL) return false;
$select = "SELECT ";
$where = " WHERE ";
$iQuery = 0;
$sqlParams = array();
$columnCount = count($columns) - 1;
foreach($whereArgs as $key => $value)
{
$paramKey = sprintf(':%s', $key);
$where .= sprintf("`%s`= %s", $key, $paramKey);
$sqlParams[ "{$paramKey}" ] = sprintf("%s", $value);
if ($iQuery <= $columnCount)
{
$select .= sprintf('`%s`', $columns[ $iQuery ]);
$select .= ', ';
}
else
{
$select .= ' ';
}
++$iQuery;
}
if ($iQuery <= $columnCount)
{
for(; $iQuery < $columnCount; ++$iQuery)
{
if ($iQuery < $columnCount)
{
$select .= sprintf('`%s`', $columns[ $iQuery ]);
$select .= ', ';
}
else
{
$select .= ' ';
}
}
}
$select .= sprintf("FROM `%s`", $table);
$query = $select . $where;
return $this->doQuery($query, $sqlParams, TRUE, QueryType::Row);
}
附件B:doQuery($query, $sqlParams, $return = FALSE, $queryType = QueryType::None)
这个功能比较简单:它是所有绑定值和执行语句,并及时检查哪种类型的返回(返回类型,它们要么'row','column'或'all',由类QueryType
指定,该类不在本期范围内),然后返回所要求的内容。
protected function doQuery($query, $sqlParams, $return = FALSE, $queryType = QueryType::None)
{
$statement = $this->mConnection->prepare($query);
foreach($sqlParams as $param => $value)
{
$statement->bindValue($param, $value);
}
$statement->execute();
if ($return)
{
switch($queryType)
{
case QueryType::Row:
return $statement->fetch();
case QueryType::Column:
return $statement->fetchColumn();
case QueryType::All:
return $statement->fetchAll();
case QueryType::None:
return $statement;
default:
return false;
}
}
}
附件C:test.php
这仅仅是一个小的测试脚本,我写的测试数据库。
$database = new Database('evolve_admin');
$res = $database->fetch(
'evol_users',
array('user.id', 'user.email', 'user.firstname'),
array('user.email' => '[email protected]')
);
var_dump($res);
其他意见
我了解到,有是有毛病我的代码,我只是失去了,究竟它可能是。就我的调试技巧而言,我已经有研究过这个问题了很多,看来这个错误很常见。我的主要目标是让包装工作,如果有人发现代码本身有任何问题(包括特别是这个问题之外的问题),请告诉我。
对于任何人谁提供在这一个手:非常感谢你。
根据绑定参数的数量检查生成的SQL,然后找出数字不匹配的原因。 – Corbin 2012-04-01 03:59:32
问题是只有一个参数被绑定。我测试了通过并绑定参数的for循环。我也能够输出变量,它们看起来应该完全一样。 – zeboidlund 2012-04-01 04:25:02
不,问题是没有参数被绑定(或者更具体地说,你有N个参数并且绑定了一些x使得x
Corbin
2012-04-01 04:26:46