stmt get_result другой путь

Пример одного из моих запросов …

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 против 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

Решение

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;
}

После получения результата функции вы можете цепь метод выборки для его вызова, fetchColumn () в вашем случае.

Учитывая, что ваш код в основном процедурный, позвольте мне предложить вам очень простая оболочка PDO Я написал. Таким образом, полный код будет:

$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() это фактически может использоваться для любого типа запроса, включая вставку, обновление или что-нибудь еще.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector