我知道:這已經完成了死亡。但是,相信我,我一直在研究如何解決這個問題。我想要實現的是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