私は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関数をどのように説明しますか?または、テーブルのすべてのフィールドに値を挿入することを計画する必要がありますか?