codeIgniter использует mysql_real_escape_string () вместо проблемы подключения базы данных

У меня установлен код воспламенителя на сервере с базой данных. Я хочу запустить ту же базу данных на своем Mac, я использовал MAMP и копирую папку проекта в htdocs, но у меня есть эта ошибка
не могли бы вы помочь мне!

ErrorException [ 8192 ]: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead.

3

Решение

Не бойтесь менять основные файлы, просто измените FCPATH / system / database / drivers / mysqli / mysqli_driver.php

function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach ($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}

return $str;
}

if (function_exists('mysqli_real_escape_string') AND is_object($this->conn_id))
{
$str = mysqli_real_escape_string($this->conn_id, $str);
}
else
{
$str = addslashes($str);
}

// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}

return $str;
}

У меня была такая же проблема


Лучшее решение -> https://ellislab.com/forums/viewthread/228288/ "stated in github that it will be fixed in CodeIgniter 3.0 the fix already exists in that repository"

9

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

Попробуй это

function escapeString($val) {
$db = get_instance()->db->conn_id;
$val = mysqli_real_escape_string($db, $val);
return $val;
}
4

попробуй это:

$db['development']['hostname'] = 'mysql:host=localhost';
$db['development']['dbdriver'] = 'pdo';

$db['staging']['hostname'] = 'mysql:host=localhost';
$db['staging']['dbdriver'] = 'pdo';

Я обновил ответ

1

также, чтобы использовать функцию mysqli_real_escape_str, вам нужен mysqli, чтобы получить ее

function get_mysqli() {
$db = (array)get_instance()->db;
return mysqli_connect('localhost', $db['username'], $db['password'], $db['database']);}

Вышеприведенная функция возвращает объект mysqli, который вы можете использовать,

$escaped = mysqli_real_escape_string(get_mysqli(),$string);

Это работает хорошо, но не так важно здесь!

1

Это не идея goot редактировать основные файлы CI. Если вы не хотите видеть устаревшие предупреждения от mysql_escape_string, использовать mysql_real_escape_string() вместо этого вам нужно открыть соединение с БД. использование db->initialise() в вашем базовом контроллере

class Base_controller extends CI_Controller {
function __construct() {
parent::__construct();

$this->load->database('db_name');
$this->db->initialize();
0
По вопросам рекламы [email protected]