我的一个查询示例......
public function db_query_select($query, $params, $param_types){
$dbc = $this->dbConnect();
if($stmt = $dbc->prepare($query)){
//prepared.
//move the types to the front of the param array
array_unshift($params, $param_types);
//call the bind param function with the parameters passed in by reference
//bind_param only allows by reference.
call_user_func_array(array($stmt, "bind_param"), $this->paramsToRefs($params));
//binded.
//attempt to execute the sql statement.
if ($stmt->execute()){
$result = $stmt->get_result();
$stmt->close();
$dbc->close();
return $result;
}
}
//must have failed...
return NULL;
}
如何更改stmt get_result();没有本机驱动程序的共享服务器/主机接受的东西... mysqlnd。
有人知道吗?而不会更改使用此数据库功能的所有函数。
感谢。
更新::::感谢@your常识,请参阅答案。
我相信这就是我追求的目标。希望它能帮助那些和我一样有同样问题的人。 PDO vs MySQLi,似乎更简单......没有用户调用func或类似的东西。
DB HANDLER:
private function dbConnect(){
$config = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/NTConfig.ini');
try {
$dbc = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_DATABASE'].'', $config['DB_USER'], $config['DB_PASSWORD']);
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
exit;
}
return $dbc;
}
public function db_query_select($query, $params){
$dbc = $this->dbConnect();
if($stmt = $dbc->prepare($query)){
//prepared.
//attempt to execute the sql statement.
if ($stmt->execute($params)){
$result = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($result);
//$stmt->close();
//$dbc->close();
return $result;
}
}
//must have failed...
return NULL;
}
在DBHANDLER之外
$query = "SELECT error_desc FROM nt_errors WHERE error_code = :ERROR_CODE LIMIT 1";
//array: holds parameters for the query.
$params = array(
':ERROR_CODE' => $code
);
$result = $db->db_query_select($query, $params);
if ($result == NULL){
$errorText = 'ERROR: Failed to retrieve error';
}
else{
//var_dump($result);
$errorText = $result['error_desc'];
答案 0 :(得分:0)
PDO不仅比mysqli更加用户友好,而且也没有任何这种令人讨厌的缺点。所以我强烈建议使用PDO而不是mysqli。
使用DO,您之后的功能应该像这个一样简单
function run($sql, $args = NULL)
{
$pdo = ...;//your means of getting the connection variable
$stmt = $pdo->prepare($sql);
$stmt->execute($args);
return $stmt;
}
获得函数的结果后,你可以链接一个fetch方法到你的调用fetchColumn()。
鉴于你的代码主要是程序性的,我建议你写一篇非常simple PDO wrapper的代码。所以完整的代码将是:
$sql = "SELECT error_desc FROM nt_errors WHERE error_code = ?";
$errorText = DB::run($sql,[$code])->fetchColumn();
if (!$errorText){
$errorText = 'ERROR: Failed to retrieve error';
}
这里DB类是dbConnect()函数的更好替代品,run()方法是db_query_select()
的替代品,实际上可以用于任何查询类型,包括插入,更新或任何其他。