背景
我一直在从头开始开发一个内容管理系统。由于经验的原因,它主要是从零开始开发的,但它也将在以后使用。
我用PHP语言开发了一个扩展 mysqli 类的 DatabaseManager 类。我正在使用它做MySQL查询和连接。我开发的一个函数传递SQL查询字符串(已参数化),后跟要替换的正确值的数组。
mysqli
DatabaseManager
TL;DR
长话短说,我使用 ReflectionClass 将参数绑定到SQL查询和执行。我很好奇这是一种安全的方法,还是有另一种最适合的方法?
ReflectionClass
该方法
这是 DatabaseManager::do_query() 方法:
DatabaseManager::do_query()
function do_query($sql, $values){ if(!isset($this->connect_error)){ $num_vals = count($values); $i = 0; $type = ""; while($i < $num_vals){ if(is_int($values[$i]) == true) $type .= "i"; elseif(is_string($values[$i]) == true) $type .= "s"; $i++; $i = 0; while($i < $num_vals){ $values2[$i] = &$values[$i]; $i++; $values2 = array_merge(array($type), $values2); $expr = $this->prepare($sql); if($expr != false){ $ref = new ReflectionClass('mysqli_stmt'); $method = $ref->getMethod("bind_param"); $method->invokeArgs($expr, $values2); $expr->execute(); return "Success"; }else{ $error_string = "Error: Query preparation resulted in an error. "; $error_string .= $this->error; __TGErrorHandler(TG_ERROR_DB_PREP); return $error_string;