我编写了一个带有查询函数的pdo包装器类,以自动获取数组并在执行之前将值绑定到语句。
public function query($query, $sprints = NULL)
{
// Add query to the last query and benchmark
$bench['query'] = $query;
// Prepare the statement
$this->result = $this->pdo->prepare($query);
// Process our sprints and bind parameters
if(is_array($sprints))
{
// Bind our parameters
foreach($sprints as $key => $value)
{
// if we are using "?'s", then we up the keys +1
if(is_int($key)) ++$key;
// Bid the param based on its type
if(is_int($value))
{
// Bind the param
$this->result->bindParam($key, $value, \PDO::PARAM_INT);
$bench['bound'][$key] = $value;
}
else
{
// Bind the param
$this->result->bindParam($key, $value, \PDO::PARAM_STR, strlen($value));
$bench['bound'][$key] = $value;
}
}
}
// Time, and process our query
$start = microtime(true);
try {
$this->result->execute();
}
catch (\PDOException $e) {
// show error
}
$end = microtime(true);
// Get our benchmark time
$bench['time'] = round($end - $start, 5);
// Get our number of rows
$this->num_rows = $this->result->rowCount();
// Add the query to the list of queries
$this->queries[] = $bench;
// Return
return $this;
}
问题是,在Insert上,它用最后一个绑定参数替换所有?。这里有查询和结果:
INSERT INTO sessions(`token`,`ip_address`,`last_seen`,`user_data`) VALUES (?, ?, ?, ?)
绑定的参数是:
[bound] => Array ( [1] => test1 [2] => 0.0.0.0 [3] => test3 [4] => test4 )
结果在数据库中,所有4列都填充了test4。任何人都知道为什么这样做?
答案 0 :(得分:2)
Dunno你的问题是什么,但为什么不这样做呢
$this->result = $this->pdo->prepare($query);
$this->result->execute($sprints);
答案 1 :(得分:2)
使用bindValue,而不是bindParam。
<?php
if ( count( $this->_params ) > 0 )
{
foreach ( $this->_params as &$param )
{
$statement->bindValue( ":{$param->name}", $param->value, $param->type );
}
}