我嘗試為我的網站實作一個帶有資料庫的視圖計數器。
我的代碼:
創建查詢的函式:
public function addRowViewCompany($arrElement) {
$query = "INSERT INTO views_company (";
$columns = "";
$values = "";
// columns
foreach ($arrElement as $column => $value) {
if ($value === end($arrElement)) {
// if last column
$columns .= $column . ") VALUES(";
$values .= ":" . $column . ");";
} else {
$columns .= $column . ", ";
$values .= ":" . $column . ", ";
}
}
$this->setQuery($query . $columns . $values);
$this->prepareStatement();
$this->executeStatement($arrElement);
}
呼叫方法:
$database->addRowViewCompany(array(
"view_id" => null,
"view_date" => date("Y-m-d"),
"company_id" => intval($companyID),
"views" => 1
));
創建的查詢:
INSERT INTO views_company (view_id, view_date, company_id) VALUES(views) VALUES(:view_id, :view_date, :company_id);:views);
該位置的查詢錯誤: INSERT INTO views_company (view_id, view_date, company_id) VALUES(views ) VALUES(:view_id, :view_date, :company_id );: views);
但我不明白為什么它會被錯誤地創建對于其他用例,此功能有效。
編輯:
public function __construct() {
$this->connection = new PDO("mysql:host=localhost;dbname=ref;charset=utf8", "***", "***");
}
public function setQuery(string $query) {
$this->query = $query;
}
public function prepareStatement() {
$this->statement = $this->connection->prepare($this->query);
}
public function executeStatement(array $args = null) {
if ($args == null) {
$this->statement->execute();
} else {
$this->statement->execute($args);
}
}
uj5u.com熱心網友回復:
如果有一個值與陣列中的最后一個值重復,則您的代碼將不起作用,因為$value === end($arrElement)重復項將是 true。這將導致您在查詢中添加額外內容VALUES。
不要使用回圈,使用implode(). 那么你就不需要特別對待最后一次迭代了。
$columns = implode(', ', array_keys($arrElement);
$values = implode(', ', array_map(function($col) { return ':' . $col; }, array_keys($arrElement)));
$this->setQuery("$query ($columns) VALUES ($values)");
uj5u.com熱心網友回復:
對您的代碼的這種修改呢?
public function addRowViewCompany($arrElement) {
$query = "INSERT INTO views_company (";
$columns = "";
$middle = ") VALUES(";
$values = "";
$end = ")";
// columns
foreach ($arrElement as $column => $value) {
$columns .= ((strlen($column)==0)?"":", ") . $column;
$values .= ((strlen($values)==0)?"":", ") . ":" . $column;
}
$this->setQuery($query . $columns . $middle . $values . $end);
$this->prepareStatement();
$this->executeStatement($arrElement);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497103.html
