2013-04-25 46 views
5

Tôi hiện đang sử dụng mã NỮA để lấy dữ liệu từ người dùng, như sau:Cách nâng cấp từ mysql_ * lên mysqli_ *?

/* retrieve */ 
$lastName = $_POST['lastName']; 
$firstName = $_POST['firstName']; 
$examLevel=$_POST['level']; 

/* connect */ 
$dbc=mysql_connect("localhost", "user", "passw") or die('Error connecting to MySQL server'); 
mysql_select_db("db") or die('Error selecting database.'); 

/* sanitize */ 
$lastName=mysql_real_escape_string($lastName); 
$firstName=mysql_real_escape_string($firstName); 
$examLevel=mysql_real_escape_string($examLevel); 


/* insert */ 
$query_personal = "INSERT INTO personal (LastName, FirstName) VALUES ('$lastName', '$firstName')"; 

$query_exam = "INSERT INTO exam (Level, Centre, BackupCentre, etc.) VALUES ('$examLevel', '$centre', '$backup', 'etc')"; 

này đang làm việc nhưng tôi tiếp tục đi ngang qua cảnh báo về an ninh và thiếu sự hỗ trợ. Có một viết lại nhỏ để kết nối với mysqli thay vì mysql nhưng còn khoảng mysqli_real_escape_string? Tôi đã nhìn thấy nó được sử dụng trong các ví dụ nhưng tôi cũng đã nhìn thấy lời khuyên để sử dụng báo cáo chuẩn bị thay vì không sử dụng mysqli_real_escape_string.

Và làm cách nào để sử dụng câu lệnh đã chuẩn bị để INSERT dữ liệu của mình? Tôi đang ở trên biển một chút với chút này. Ví dụ, là ràng buộc tham số chỉ cho INSERT và kết quả kết buộc chỉ cho các SELECT?

+0

Xin lỗi, không thể lấy mã định dạng đúng . – Benjamin

+0

Thật khó để đánh dấu tất cả mã và nhấp vào '{}'? – Barmar

+0

Tôi tự hỏi là một kỷ lục để được bảo trợ ở đây? 2 phút 35 giây. Tôi sẽ cố gắng để có được hang của nó! – Benjamin

Trả lời

0

Chuyển đổi nó để PDO

/* connect */ 
$dsn = "mysql:host=localhost;db=test;charset=utf8"; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 
$pdo = new PDO($dsn,"user", "passw", $opt); 


/* insert */ 
$query = "INSERT INTO personal (LastName, FirstName) VALUES (?, ?)"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(array($_POST['lastName'],$_POST['firstName'])); 

$query = "INSERT INTO exam (Level, Centre, BackupCentre, etc) VALUES (?, ?, ?, 'etc')"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(array($_POST['level'], $centre, $backup)); 
+0

Cảm ơn bạn, YCS! Bây giờ tôi đang thâu tóm PDO, tôi sẽ nghiên cứu kỹ câu trả lời của bạn. – Benjamin

0

xem trang này để chuyển đổi mysql vào mysqli

Converting_to_MySQLi

https://wikis.oracle.com/display/mysql/Converting+to+MySQLi

và xem mysqli_real_escape_string thủ công để giải thích về mysqli_real_escape_string và vấn đề an ninh và làm thế nào để giải quyết nó.

php.net:

An ninh: các ký tự mặc định

Các bộ ký tự phải được thiết lập hoặc ở mức độ máy chủ, hoặc với các hàm API mysqli_set_charset() cho nó ảnh hưởng đến mysqli_real_escape_string(). Xem phần khái niệm trên character sets để biết thêm thông tin.

xem trang này để truy vấn cho insert data

xem trang này để prepare data for inserting to mysql

http://php.net/manual/de/mysqli.quickstart.prepared-statements.php

Các vấn đề liên quan