-1

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


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."')
"));

我现在别无选择

4

2 回答 2

0

我不太确定你要做什么,我会给你一个快速的解决方案,尽管它是一个肮脏的解决方案。

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

[..]

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

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

于 2012-12-05T09:04:36.997 回答
0

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

'INSERT INTO ... %d'

然后:

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

但在我看来,总体而言,您的query功能做得太多和/或对其工作内容感到困惑。这太复杂了。只需让query函数执行一个带有适当错误处理的查询并返回插入 id,然后调用它两次:

$id = $defaults->query('INSERT ...');
$defaults->query("INSERT ... $id");
于 2012-12-05T09:05:37.467 回答