codeIgniter使用mysql_real_escape_string()代替.database连接问题

时间:2014-10-02 20:51:16

标签: php mysql codeigniter mysqli mamp

我在数据库的服务器上安装了代码点火器我想在我的mac上运行相同的数据库,我使用MAMP并且我在htdocs中复制项目文件夹,但是我有这个错误 你能帮帮我吗?

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

6 个答案:

答案 0 :(得分:9)

不要害怕更改核心文件,只需更改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"

答案 1 :(得分:4)

试试这个

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

答案 2 :(得分:1)

试试这个:

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

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

我已经更新了答案

答案 3 :(得分: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);

虽然效果很好,但在这里并不重要!

答案 4 :(得分:0)

编辑核心CI文件并不是一个好主意。如果您不希望看到来自mysql_escape_string的已弃用警告,则要使用mysql_real_escape_string(),而是需要与DB打开连接。在基本控制器中使用db->initialise()

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

    $this->load->database('db_name');
    $this->db->initialize();

答案 5 :(得分:-2)

在 Model 类中创建一个函数,该函数将使用数据库连接字符串并从控制器传递值以使用 mysqli_real_escape_string() 进行转换

function MysqliRealeScapeString($val){

    $new = mysqli_real_escape_string($this->db->conn_id, $val);
    return $new;
}