-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が適切なエラー処理で 1 つのクエリを実行し、挿入 ID を返すようにしてから、それを 2 回呼び出します。

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