Tôi biết đây là đối với trường hợp của một loại mysql PDO .. nhưng những gì tôi làm là xây dựng phương pháp PDO wrapper, và trong trường hợp này tôi làm chức năng này giúp xây dựng chuỗi, kể từ khi chúng tôi làm việc với các phím, không có cách nào có thể để mysql tiêm, kể từ khi tôi biết các phím i xác định/chấp nhận bằng tay.
tưởng tượng dữ liệu này:
$data=array(
"name"=>$_GET["name"],
"email"=>$_GET["email"]
);
bạn đã định nghĩa phương pháp utils ...
public static function serialize_type($obj,$mode){
$d2="";
if($mode=="insert"){
$d2.=" (".implode(",",array_keys($obj)).") ";
$d2.=" VALUES(";
foreach ($obj as $key=>$item){$d2.=":".$key.",";}
$d2=rtrim($d2,",").")";}
if($mode=="update"){
foreach ($obj as $key=>$item){$d2.=$key."=:".$key.",";}
}
return rtrim($d2,",");
}
thì người xây dựng mảng truy vấn bind (tôi có thể sử dụng tài liệu tham khảo mảng trực tiếp nhưng cho phép đơn giản hóa):
public static function bind_build($array){
$query_array=$array;
foreach ($query_array as $key => $value) { $query_array[":".$key] = $query_array[$key]; unset($query_array[$key]); } //auto prepair array for PDO
return $query_array; }
thì bạn thực hiện ...
$query ="insert into table_x ".self::serialize_type($data, "insert");
$me->statement = @$me->dbh->prepare($query);
$me->result=$me->statement->execute(self::bind_build($data));
Bạn cũng có thể đi cho một bản cập nhật dễ dàng với ...
$query ="update table_x set ".self::serialize_type($data, "update")." where id=:id";
$me->statement = @$me->dbh->prepare($query);
$data["id"]="123"; //add the id
$me->result=$me->statement->execute(self::bind_build($data));
Nhưng phần quan trọng nhất ở đây là chức năng serialize_type
Tôi thấy bạn đang cố tạo một trình tạo truy vấn SQL. Tôi sẽ nói với bạn ngay bây giờ đây là nỗi đau lớn trong mông ... Bằng cách này sẽ tạo ra SQL không hợp lệ nếu '$ conditionalArray' của bạn trống (vì mệnh đề WHERE vẫn còn ở đó) ... Và bạn không chứa LIKE, <>, v.v. – quantumSoup