0

私はMDB2のプリペアドステートメントを使用していますが、ドキュメント、特にNOW()やCURDATE()などのMySQL組み込み関数を扱っているドキュメントと少し混乱しています。

$ dataで渡される値は、リテラルである必要があります。SQL関数(CURDATE()など)を送信しないでください。実行時に実行する必要のあるSQL関数は、プリペアドステートメントに含める必要があります。同様に、識別子(つまり、テーブル名と列名)は、準備フェーズで検証されるため、使用できません。

したがって、ドキュメントには、これらの関数をプリペアドステートメントに含めるように記載されていますが、フィールド名を説明する方法がわかりません。たとえば、5つの列を持つテーブルがある場合:

id姓名性別日付追加

そして、最初、最後、日付が追加された行を挿入したい...次のようなものを使用する可能性があります

INSERT INTO mytable (firstname,lastname,dateadded) VALUES('jane','doe',NOW())

dateadded列がなかった場合は、次のようなものを使用します。

    $types = array(
        'text', 
        'text' 
    );
    $sth = $mdb2->prepare('
        INSERT INTO 
            mytable 
        VALUES 
            (
                :firstname,
                :lastname
            )', $types);

    $data = array(
        'firstname'     => 'Jane', 
        'lastname'  => 'Doe'
    );
    $affectedRows = $sth->execute($data);

では、フィールド名をリストする限り、MySQL関数をどのように説明しますか?または、テーブルのすべてのフィールドに値を挿入することを計画する必要がありますか?

4

1 に答える 1

1

私はあなたの問題を理解していません。
それが言ったように、なぜプリペアドステートメントにNOW()を追加しないのですか?

$sql = 'INSERT INTO mytable ( lastname, firstname, dateadded) 
        VALUES (:firstname, :lastname, NOW())';
$sth = $mdb2->prepare($sql, $types);
于 2013-01-06T23:46:32.777 に答える