2014-02-23 72 views
0

我正在构建一个CMS,并且我已经编写了几个函数来处理在脚本中弹出的一些sql任务。功能如下:在一个函数中生成可变数量的变量

function execute_sql_query($stmt,$types,$var1,$query_success,$object_name,$sql_action) 
{ 
    if(mysqli_stmt_bind_param($stmt, $types, $var1)) 
    { 
     if(!mysqli_stmt_execute($stmt)) 
     { 
      echo 'MySQL Execution Error: ' . $object_name . '<br>'; 
      $query_success = FALSE; 
      echo "<br />"; 
     } 
     else 
     { 
      echo $object_name . ' successfully ' . $sql_action . '<br>'; 
     } 
    } 
    else 
    { 
     echo 'MySQL Bind Error: ' . $object_name . '<br>'; 
     $query_success = FALSE; 
    } 
} 

function sql_close($stmt,$query_success,$mysqli) 
{ 
    mysqli_stmt_close($stmt); 
    if ($query_success) 
    { 
     echo 'All changes were successfully saved!<br>'; 
     mysqli_commit($mysqli); 
    } 
    else 
    { 
     echo 'No changes were made to the database because of detected errors<br>!' 
     mysqli_rollback($mysqli); 
    } 
} 

的代码被称为脚本如下:

mysqli_autocommit($mysqli, FALSE); 
$query_success = TRUE; 
if($stmt = mysqli_prepare($mysqli, "DELETE FROM galleries WHERE gal_num = ?")) 
{ 
    $types = 's'; 
    $object_name = "Galleries"; 
    $sql_action = "deleted"; 
    execute_sql_query($stmt,$types,$gal_del,$query_success,$object_name,$sql_action); 
} 
sql_close($stmt,$query_success,$mysqli); 

现在这个工程,因为它是应该和它为我节省了大量的输入赫克。我只有一个问题就是这种方法。

在此查询中只有一个参数被绑定。有些会更改数据库表中的3,5甚至12个不同的字段。我写这个函数的方式只能处理一个。如果一个查询处理的不仅仅是这些,我将不得不为每个绑定不同数量参数的每个函数编写另一个函数。这主要是复制和粘贴工作,但它会否定将其放入函数中的有用性。

当它涉及到的类型

,这简直是一个字符串,所以如果查询绑定5个参数,我可以简单地给它

$type = 'sssss'; 

不是问题。我还没有找到我如何能够为将要绑定的变量做到这一点。有没有办法,我可以以某种方式喂给我的函数一个范围或变量数组(函数内的函数可能吗?),它会自动生成它们,所以我可以保持所有这些查询在一个函数?

说出是否需要绑定3个参数。我给它类似如下:

$types = 'sss'; 
$bind_vars = 3; 

而在函数内部它会产生:

if(mysqli_stmt_bind_param($stmt, $types, $var1, $var2, $var3)) 

可以这样做?提前感谢你的帮助。

回答

0

编辑:删除了我以前的答案,因为它完全被我的部分误解。 所以阵列仍然是正确的做法,只是这样做:

$type = "isssi"; 
$param = array("5", "File Description", "File Title", "Original Name", time()); 

$sql = "INSERT INTO file_detail (file_id, file_description, file_title, file_original_name, file_upload_date) VALUES (?, ?, ?, ?, ?)"; 

$sql_stmt = mysqli_prepare ($sql_link, $sql); 
call_user_func_array('mysqli_stmt_bind_param', array_merge (array($sql_stmt, $type), $param); 
mysqli_stmt_execute($sql_stmt); 
+0

非常感谢您的回答。我一直在玩与这个解决方案非常相似的阵列,但似乎无法做到这一点。我的问题是//做些事情。 :)据我了解,mysqli_stmt_bind_param()是一个内置函数,它绑定了给定变量中包含的参数。如果我提供需要绑定的值的数组,我该如何让它在foreach()循环中正确绑定它们? – Insomniaboy

+0

我想我完全误解了你,我会试着编辑我的答案,以便为你获得一些有价值的东西。 –

+0

太棒了。谢谢一堆。能够使它与此一起工作。 – Insomniaboy