Hướng dẫn mysqli_real_escape_string in codeigniter - mysqli_real_escape_string trong codeigniter

Tôi đang sử dụng codeigniter. Tôi muốn sử dụng chuỗi trong $_POST giá trị từ mẫu tìm kiếm có thể chứa các ký tự đặc biệt như apostrophe ('), (;). $_POST['search'] giá trị vào cơ sở dữ liệu?

Bất cứ khi nào tôi sử dụng hàm mysql_real_escape_string (). Nó cho tôi: mysql_real_escape_string(): Access denied error.

Mã của tôi trông như thế này:

$query = "SELECT * FROM products WHERE  
product_name='".mysql_real_escape_string($_POST['search'])."'";

$this->db->query($query);

Làm thế nào có thể giải quyết vấn đề này trong Codeigniter? Cảm ơn

Hướng dẫn mysqli_real_escape_string in codeigniter - mysqli_real_escape_string trong codeigniter

Tom

2.9791 Huy hiệu vàng18 Huy hiệu bạc23 Huy hiệu đồng1 gold badge18 silver badges23 bronze badges

Hỏi ngày 28 tháng 9 năm 2012 lúc 10:36Sep 28, 2012 at 10:36

1

Không bao giờ sử dụng đầu vào người dùng trực tiếp vào các truy vấn của bạn. Đọc thêm về "SQL Injection" và "XSS". Đối với Codeignitor, hãy làm điều này:

  1. Không sử dụng $ _POST, sử dụng lớp đầu vào thay thế. $this->input->post

  2. Sử dụng ràng buộc truy vấn, mysql_real_escape_string là không cần thiết. ví dụ.

    $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";
    
    $this->db->query($sql, array(3, 'live', 'Rick')); 
    

Đã trả lời ngày 28 tháng 9 năm 2012 lúc 10:39Sep 28, 2012 at 10:39

Hướng dẫn mysqli_real_escape_string in codeigniter - mysqli_real_escape_string trong codeigniter

DhruvpathakdhruvpathakDhruvPathak

41.3K15 Huy hiệu vàng115 Huy hiệu bạc173 Huy hiệu đồng15 gold badges115 silver badges173 bronze badges

Cách tốt nhất để làm điều đó sẽ là:

$query = "SELECT * FROM products WHERE product_name=?";
$this->db->query($query, array($this->input->post('search'));

Hãy xem các tài liệu ở đây: http://codeigniter.com/user_guide/database/queries.html

Nếu bạn thực sự muốn làm điều đó với việc trốn thoát, hãy nhìn vào các truy vấn trốn thoát. Nhưng sẽ tốt hơn nếu làm điều đó với ràng buộc (như ví dụ của tôi ở trên)

Đã trả lời ngày 28 tháng 9 năm 2012 lúc 10:41Sep 28, 2012 at 10:41

Manavomanavomanavo

1.8192 huy hiệu vàng14 Huy hiệu bạc16 Huy hiệu đồng2 gold badges14 silver badges16 bronze badges

Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?

  • El ForumGuest
    Guest
  • & nbsp;


.
codeigniter This function is deprecated; use mysql_real_escape_string() instead.
I'm using the latest CI and mysql with mysqli library.
the escape_str in the mysqli driver:

Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1'
{
if (function_exists('mysqli_real_escape_string') AND is_resource($this->conn_id))
{
return mysqli_real_escape_string($this->conn_id, $str);
}
elseif (function_exists('mysql_escape_string'))
{
return mysql_escape_string($str);
}
else
{
return addslashes($str);
}
}

Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?

Tyrael

  • El ForumGuest
    Guest
  • & nbsp;


.
I don't understand what you say. Can you explain? When will a warning come up?

  • El ForumGuest
    Guest
  • & nbsp;


.
set your default db connection dbdriver setting to:
$db['default']['dbdriver'] = "mysqli";
then run a query with some params what needs to be escaped.

Tyrael

  • El ForumGuest
    Guest
  • & nbsp;


.
Using mysqli driver
$this->db->query('SELECT * FROM test WHERE "1" = ?', array('1'));

Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1'
SELECT * FROM test WHERE "1" = '1'

Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?

  • El ForumGuest
    Guest
  • & nbsp;


.
$this->db->query('SELECT CONCAT(?, ?)', array('?_(GQOoV', '?_(GQOoV'));

Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1'

Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?

.

Một Lỗi PHP đã gặp phải

Mức độ nghiêm trọng: Cảnh báo
A PHP Error was encountered

Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?

.

Một Lỗi PHP đã gặp phải

Mức độ nghiêm trọng: Cảnh báo

Tin nhắn: mysql_escape_string () [function.mysql-real-escape-chuỗi]: hàm này không được dùng nữa; sử dụng mysql_real_escape_string () thay thế.

Tên tệp: mysqli/mysqli_driver.php
$active_record = TRUE;

Số dòng: 258 Một lỗi PHP đã gặp phải
$db['default']['username'] = "asd";
$db['default']['password'] = "bsd";
$db['default']['database'] = "asd";
$db['default']['dbdriver'] = "mysqli";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_hungarian_ci";

Tyrael

  • El ForumGuest
    Guest
  • & nbsp;


[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
I actually have mysqli_real_escape_string function, so I wan't getting there... but also I'm not getting the warning... Even with

Code:

<?php
error_reporting(E_ALL | E_STRICT);
echo mysql_escape_string("Hello");
?>

Tôi đang hiểu nó ổn ... nhưng có lẽ là một @ trước khi gọi chức năng sẽ không làm tổn thương ai ...

Tôi có thể biết phiên bản PHP của bạn không?

  • El ForumGuest
    Guest
  • & nbsp;


[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
the $this->conn_id is set, but its a mysqli_object, not a resource, so the
if (function_exists('mysqli_real_escape_string') AND is_resource($this->conn_id))
condition will never be true.
I replaced it with
if (function_exists('mysqli_real_escape_string') AND !empty($this->conn_id))

Tyrael

  • El ForumGuest
    Guest
  • & nbsp;


[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
You are SO right...
Please report it in bug tracker

  • El ForumGuest
    Guest
  • & nbsp;


[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
done

Tyrael

  • El ForumGuest
    Guest
  • & nbsp;


[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
I have a problem with this function mysql_real_escape_string() in mysql driver, I hope you can help me with this.
The code is this:

Code:

/**
     * Escape String
     *
     * @access    public
     * @param    string
     * @return    string
     */
    function escape_str($str, $like = FALSE)    
    {    
        if (is_array($str))
        {
            foreach($str as $key => $val)
               {
                $str[$key] = $this->escape_str($val, $like);
               }

                          return $str;
           }

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick')); 
0

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick')); 
1

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?";

$this->db->query($sql, array(3, 'live', 'Rick')); 
2

<?php
error_reporting(E_ALL | E_STRICT);
echo mysql_escape_string("Hello");
?>