php将变量作为字符串传递给下一个函数中的变量?

时间:2014-10-11 10:44:08

标签: php variables mysqli

我试图将一个变量作为SQL语句中的字符串发送到我的DB函数,然后该函数应该将该字符串用作变量并进行处理。

它的多个插入脚本(作为数组)需要最后一个插入ID,这里是一个缩短的代码:

     $insertID = "$"."insertID";
     $sql = array("first INSERT Script", "INSERT into blah(`ID`, `Name`)
             VALUE ('$insertID', '$name')", "Third script"); 

     $result = dbInsert($sql);

     if ($result){
        // do something
     }

这里是插入功能,我正在尝试这种方式是否有效:

    function dbInsert($sql){
        $con = dbConnect(); 
        try {
        // begin a transaction
        mysqli_begin_transaction($con);

        foreach ($sql as $value) {
          if ($con-> query($value)) {
                $insertID = $con-> insert_id;
            } else {
            trigger_error(mysqli_error($con));
            }
        }
        // if no error, commit. 
        mysqli_commit($con);
    } catch (Exception $e) {
        // if any error, catch the exception and rollback 
        mysqli_rollback($con);
    }
       /* close connection and return the result */
        $con->close();
        return $insertID;
    }

请注意,第一个脚本不需要任何最后一个插入ID,但后续脚本不需要。我知道我可以单独插入并跳过这一切,但如果我只发送一个SQL数组并且函数执行插入并发回最后一个插入ID(以验证),那将会很好。

当我回显(& die)时,函数dbInsert中的SQL语句有" $ result" ($ insertID的值),但它将其读取为字符串而不是变量,它保存最后一个插入ID。我尝试了几个组合但无济于事。

电流:

   INSERT INTO `tblstudent` (`userid`, `scholarnumber`, `firstname`, `middlename`, `lastname`, `datecreated`)
   VALUES ($result, '35566', 'Joe', '', 'Blog', CURRENT_TIMESTAMP);

应该是:

   INSERT INTO `tblstudent` (`userid`, `scholarnumber`, `firstname`, `middlename`, `lastname`, `datecreated`)
   VALUES ('418', '35566', 'Joe', '', 'Blog', CURRENT_TIMESTAMP);

我希望我有意义,有人能够指出我正确的方向。非常感谢您的时间和帮助,谢谢!

事实证明,我的方式是错误的。我需要做的就是传递" LAST_INSERT_ID()"而不是传递变量等感谢您的帮助!有人可能从中受益,因此更新帖子。

1 个答案:

答案 0 :(得分:1)

要将字符串变量名称转换为实际变量,您需要使用eval,并重新格式化要发送到dbInsert的字符串。目前,您使用的是双引号,并且在发送变量之前,PHP会对这些变量进行插值。您需要将$insertID作为文本发送,因此它应该是单引号。比较这两个:

$name = 'Percy';

$sql = array(
    'INSERT into blah(`ID`, `Name`) VALUE (\'$insertID\', \'' . $name . '\')', 
    "INSERT into blah(`ID`, `Name`) VALUE ('$insertID', '$name')"); 

dbInsert($sql);

function dbInsert( $arr ){
    foreach ($arr as $a) {
        echo "$a\n";
    }
    ...

输出:

INSERT into blah(`ID`, `Name`) VALUE ('$insertID', 'Percy')
INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')

所以,请使用单引号。然后,要插值,请执行以下操作:

eval("\$a = \"$a\";");

以下是一个完整的例子:

    $name = 'Percy';
    $sql = array(
        'INSERT into blah(`ID`, `Name`) VALUE (\'$insertID\', \'' . $name . '\')', 
        "INSERT into blah(`ID`, `Name`) VALUE ('$insertID', '$name')"
    ); 

    dbInsert($sql);

    function dbInsert( $arr ){

        $insertID = '12345';
        foreach ($arr as $a) {
            echo "String before: $a\n";
            eval("\$a = \"$a\";");
            echo "String eval'd: $a\n";
        }
    }

输出:

String before: INSERT into blah(`ID`, `Name`) VALUE ('$insertID', 'Percy')
String eval'd: INSERT into blah(`ID`, `Name`) VALUE ('12345', 'Percy')
String before: INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')
String eval'd: INSERT into blah(`ID`, `Name`) VALUE ('', 'Percy')

在您的脚本中获得$insertID的值后,您可以运行eval$insertID转换为变量,然后对其进行插值。