繁体   English   中英

将变量数据从PHP传递到shell_exec命令

[英]Pass variable data from PHP to shell_exec command

我有一个脚本,可以从主sql转储文件中将表克隆到唯一命名的MySQL数据库上。 每个帐户都有自己的数据库,但是所有帐户的表结构都相同。 我的解决方案是转储主数据库表,然后通过PHP shell_exec,运行MySQL控制器cmd(mysql),以默认表填充新创建的数据库。

出现问题时:该过程有效,但仅当我在主sql转储文件中硬编码帐户唯一数据库名称时。

但是,需要在运行时动态设置主sql文件中的“ USE acct_dbID”行。

这是代码:

include('.dbase_credentials'); //constants for connection object

//using PHP built in connection class mysqli
$mysqli = new mysqli(DB_HOST,DB_UNAME,DB_UPWORD,DB_NAME);
if ($mysqli->connect_errno){
    echo "Failed to open database connection: ".$mysqli->connect_error;
    exit();
}

$dbID=$varNum; //variable, number ID generated earlier in the account setup process

//create database, doesnt return a resultset, no need for object var here
if ($mysqli->query("CREATE DATABASE acct_".$dbID) === TRUE){

    //if dbase was created, clone the tables
    $res = shell_exec('mysql -u dbaseUser --password=`cat /path/to/pass` -e "source /path/to/master_tables.sql" acct_'.$dbID);

    //provide some UI feedback, shell_exec returns null on failure
    if ($res!=null){
        echo "The tables were cloned!";
    }else{
        echo "The cloning process failed!";
    }
}else{
    echo "no database created.";
}

同样,master_tables.sql需要在运行时传递变量数据,以便“ USE acct_dbID”可以特定于每个新帐户。

任何想法表示赞赏。 rwhite35

knittl为我需要做的事情指明了正确的方向。 请参阅上面的评论对话。 谢谢knittl。 这是使用multi_query和file_get_contents的新代码块。

if ($mysqli->query("CREATE DATABASE acct_".$dbID) === TRUE){
$acct="acct_".$dbID;
$query = "USE ".$acct.";";
$query .= file_get_contents('/path/to/master_table.sql');
$result=$mysqli->multi_query($query);           
}

现在account可以是变量,并且multi_query将运行字符串中的每个查询语句。 我可能会失去一些效率,但是获得了为每个新帐户克隆表的功能。 唯一进行的其他编辑是对master_table.sql的修改。 我删除了转储过程中添加的所有注释。 谢谢,rwhite35

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM