我如何使用 CodeIgniter 执行 sql 脚本并将数据传递给它?

Posted

技术标签:

【中文标题】我如何使用 CodeIgniter 执行 sql 脚本并将数据传递给它?【英文标题】:How i can execute a sql script with CodeIgniter and pass data to it? 【发布时间】:2014-09-28 14:30:13 【问题描述】:

我有一个生成数据库的 sql 脚本,我希望当我按下按钮时注册它调用 sql 脚本,但在传递给 sql 脚本数据之前关于如何调用数据库。

有些是这样的:

make_db($name_db);

【问题讨论】:

【参考方案1】:
$sql = file_get_contents("update-001.sql");

/*
Assuming you have an SQL file (or string) you want to run as part of the migration, which has a number of statements...
CI migration only allows you to run one statement at a time. If the SQL is generated, it's annoying to split it up and create separate statements.
This small script splits the statements allowing you to run them all in one go.
*/

$sqls = explode(';', $sql);
array_pop($sqls);

foreach($sqls as $statement)
    $statment = $statement . ";";
    $this->db->query($statement);   

原帖在这里:https://gist.github.com/Relequestual/4088557

【讨论】:

这种方法的问题是某些字段值可能包含';'字符。【参考方案2】:

根据文件的大小,最好将其转换为 Codeigniter 模型函数,但如果不可能,您可以尝试类似exec("mysql < sql_file_name.sql");

看起来您想将数据库的名称传递给函数,因此您可以从文件中取出“CREATE DATABASE 不管什么”行,将其作为普通的 codeigniter 查询运行,然后“执行”其余部分该数据库的脚本。

显然,以这种方式创建数据库通常不是一个好主意,但我不是在这里判断 :-)

【讨论】:

【参考方案3】:

这是一种不同的方法,试试

$this->db->query(file_get_contents("MySqlScript.sql"));

【讨论】:

【参考方案4】:

你可以这样做

    $CI = & get_instance();
    $templine = '';
    // Read in entire file
    $lines = file('update-001.sql');
    foreach($lines as $line) 
        // Skip it if it's a comment
        if (substr($line, 0, 2) == '--' || $line == '')
            continue;

        // Add this line to the current templine we are creating
        $templine.=$line;

        // If it has a semicolon at the end, it's the end of the query so can process this templine
        if (substr(trim($line), -1, 1) == ';') 
            // Perform the query
            $CI->db->query($templine);
            // Reset temp variable to empty
            $templine = '';
        
    

我从这里得到了这个过程https://***.com/a/19752106/3602846

【讨论】:

以上是关于我如何使用 CodeIgniter 执行 sql 脚本并将数据传递给它?的主要内容,如果未能解决你的问题,请参考以下文章

我如何防止使用codeigniter进行sql注入[重复]

codeigniter 活动记录,生成,但不执行查询

codeigniter mysql中sql查询的空结果

如何避免codeigniter中的sql注入

如何使用 CodeIgniter 强制执行描述性 URL?

如何将Codeigniter与MSSQL(SQL Server)连接?