【问题标题】:How can i execute a prepared SQL statement multiple times inside a FOR loop ? [duplicate]如何在 FOR 循环中多次执行准备好的 SQL 语句? [复制]
【发布时间】:2017-05-26 03:40:32
【问题描述】:

我想使用准备好的语句向我的表中插入多行,为此我使用循环从数组中提取数据并将其用于 y 语句参数,这是我的代码示例:

require_once("connect.php");
$data_array = Array();
$string = 'faycal,18,12,2016,podes|Arab,19,12,2016,kashi|faycal,20,12,2016,exec';
function create_array($input){
    $formated_array = explode('|', $input);
    $query = $con->prepare("INSERT INTO my_table (bill_name,bill_num,month,year,type) VALUES(?, ?, ?, ?, ?)");
        for ($i = 0;$i < count($formated_array);$i++){
            for($j = 0;$j < 5;$j++){
                $data_array[$i][$j] = explode(',', $formated_array[$i])[$j];
            }
            $query->bind_param($name, $num, $month, $year, $type);
            $name =  $data_array[$i][0];
            $num = (int)$data_array[$i][1];
            $month = (int)$data_array[$i][2];
            $year = (int)$data_array[$i][3];
            $type = $data_array[$i][4];

            $query->execute();
        }   
        echo "Records have been saved successfully";

}
create_array($string);

我在没有执行语句的情况下测试了这个函数,并尝试回显 data_array,一切正常所以我假设我的 SQL 语句有问题,我无法弄清楚。

【问题讨论】:

    标签: php mysql for-loop prepared-statement


    【解决方案1】:

    范围、范围、范围默认情况下,$con 变量在函数内部不可见。所以将它作为参数传递给函数。

    function create_array($con, $input){
        $query = $con->prepare("INSERT INTO my_table
                                      (bill_name,bill_num,month,year,type) 
                                VALUES(?, ?, ?, ?, ?)");
        // ... the rest of your function body ...
    }
    
    require_once("connect.php");
    $string = 'faycal,18,12,2016,podes|Arab,19,12,2016,kashi|faycal,20,12,2016,exec';
    create_array($con, $string);
    

    【讨论】:

    • 或者,您可以在引用变量之前在函数中使用像 global $con; 这样的全局声明。当可扩展性成为问题时,您的解决方案会更好,即如果有多个连接并且您需要指定哪个连接。但是,当可扩展性不是问题时(根据我的经验,许多 Web 应用程序只有一个连接),全局方法会导致代码更加简洁和可读,因为您只编写一次全局声明,而您可能必须多次传递该参数.
    • @cazort 上帝啊! GLOBALS 永远不是解决方案,只是混乱和无法解释的错误的前奏
    • 多年来,我在数十个 Web 应用程序中一直谨慎而谨慎地使用全局变量,并且从未遇到过问题。具有单个连接的脚本中的数据库连接是我使用它们的少数几次之一。它们被过度使用,但这是一个完全独立的问题。这是一个例子,对于许多应用程序来说,它们可以正常工作并产生更简洁和可读的代码。
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 2015-06-08
    • 2022-01-23
    • 2012-04-04
    • 1970-01-01
    • 2020-11-13
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多