使用将在函数中定义的变量调用php函数

时间:2012-12-05 09:00:07

标签: php

也许是一个奇怪的标题,但我有一种情况,我想要一个输出字符串(查询,可以是任何长度)来包含将在函数内定义的变量。基本上这样的事情,只有我不能(据我所知)称之为另一个论点,因为它是查询的一部分


function foo($var){
     $name = 'Name';
     echo($var);
}

[..]

foo('Hi my name is '.$name);

在我的情况下,需要在表格中添加最后插入行的id,例如


public function query($sql){
    foreach($sql AS $sqlString){
        if(!$db->exec($sqlString)){
            echo(self::throwError('MySql error',$sqlString,implode(":",$db->errorInfo())));
        }else{
            self::writeLog($table,$db->lastInsertId(),'update');
        }
        // Add this place i need some code to replace the $id from the call with the $db->lastInsertId() from the previous query
    }
}
[..]
$defaults->query(Array("
    INSERT INTO ".$table[1]." (m_id, m_title, m_link) VALUES ('','','".$val."')
","
    INSERT INTO ".$table[3]." (nmp_id, nmp_project_id, nmp_media_id) VALUES ('','".$_POST['p_id']."','".$id."')
"));

我现在没有选择

2 个答案:

答案 0 :(得分:0)

我不确定你要做什么,我会给你一个快速的解决方案面团,虽然它是一个肮脏的解决方案。

    function foo($var) {
      global $name;
      $name = 'Name';
      echo($var);
    }

[..]

    foo('Hi my name is '.$name);

请注意,在函数上,$ name被声明为全局变量(而不是像$ var那样的方法的局部变量)

答案 1 :(得分:0)

您当然可以在查询中使用该函数将替换的占位符:

'INSERT INTO ... %d'

然后:

$sql = sprintf($sql, $id);

但在我看来,整体上你的query功能做得太多,而且/或者对它的工作感到困惑。这太复杂了。只需使query函数执行一个具有正确错误处理的查询并返回插入ID,然后调用它两次:

$id = $defaults->query('INSERT ...');
$defaults->query("INSERT ... $id");