有人知道我的问题吗?我有一个Oracle数据库,我使用了pdo。我无法获取数据,因为绑定日期列时出现问题。这是我的代码。
private function query($sql, $params = array()){
$this->_error = false;
if ($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if (count($params)) {
foreach ($params as $param) {
if (DateTime::createFromFormat('Y-m-d G:i:s', $param) !== FALSE) {
$this->_query->bindValue($x,TO_DATE($param,'YYYY-MM-DD HH24:MI:SS')); //THE PROBLEM IS HERE.<--
}else{
$this->_query->bindValue($x,$param);
}
$x++;
}
}
if ($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
$this->_error = false;
}
else
{
$this->_error = true;
}
}
return $this;
}
答案 0 :(得分:0)
使用NLS_DATE_FORMAT(有效格式为here)设置Oracle'客户端'日期格式,然后将PHP中的日期转换为相同的格式。您只需将此字符串绑定到SQL语句,而无需使用任何特殊处理。
在您的代码中,这似乎是:
if (DateTime::createFromFormat('Y-m-d G:i:s', $param) !== FALSE) {
$this->_query->bindValue($x,$param);
}
有多种方法可以设置NLS_DATE_FORMAT。如果将其设置为环境变量,则还需要设置NLS_LANG。或者,您可以在连接后运行ALTER语句。有关设置环境的详细信息,请参阅Underground PHP & Oracle Manual的全球化章节。