2

mysqliPHPライブラリでは、メソッドbind_param()でパラメーターをクエリにバインドします。 bind_param()の最初の引数はtypes、各文字がデータ型パスを表す文字列です。たとえば、文字列は 's' です。

$query = "update users set update_usr_id = ? where user_id = ?";
$arg1 = ($update_usr_id=$usr_id) ? '2011-01-01' : 'CURRENT_DATE';
$arg2 = $update_usr_id;

パラメータとして NULL または CURRENT_DATE をどのように表すことができますか?

たとえば、「CURRENT_DATE」を文字列として試してみましたが、「0000-00-00」として投稿されました。(私が知る限り、違法な日付である「0000-00-00」は、明らかにかなりの数であるNULLを使用しない人々にとってのNULLのmysqlismです)。

パラメータを使用して、NULL と CURRENT_DATE をどのように使用できますか?


@Johanは、NULLが機能することを指摘しました。テストでは、これは正しいように見えますが、そうではありません。最初の NULL パラメータから始めて、すべてのパラメータが NULL に設定されます。

デフォルト値はこれとは関係ありません。INSERT ではなく UPDATE で列を NULL または CURRENT_DATE に設定したいことが何度もあります。そのため、デフォルト値はトランザクションに影響しません。

また、不十分な点をカバーするためにトリガーを作成するという考えは、か​​なりmysqli悪いプログラミングです。私の時代にスパゲッティ トリガーを作成したことがあります。ログを更新するためのトリガーはその 1 つです。このようなトリガーは、コードが正しく維持される可能性がほとんどなく、定期的なメンテナンスの悪夢になります。

4

2 に答える 2

0

デフォルトのパラメータが必要な場合は、データベース スキーマでデフォルトを指定できます。current_date の場合、データ型をnot
に設定する必要があります。これにより、MySQL はデータが欠落している場合にフィールドに自動的に挿入します。timestampdatenow()

またはトリガーを作成する

DELIMITER $$

CREATE TRIGGER BEFORE INSERT ON FOR EACH ROW
BEGIN
  IF new.mydate IS NULL THEN SET new.mydate = NOW();
END $$

DELIMITER ;

渡したい場合はnull、var を null に設定します。

$var = null;

リンク
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

于 2011-09-07T14:59:37.840 に答える
-1

mysqliパラメータは制限されており、使用が困難です。NULLや、CURRENT_DATEなどの内部関数をパラメーターとして受け入れないだけでなく、各パラメーターは参照によって渡されます。(これは、パラメータごとにパラメータを作成する必要があることを意味します。これは、INOUTプロシージャの引数またはSELECT INTOに必要な場合がありますが、通常のdmlの場合は、単に時間の無駄です。)さらに、それらは明らかにセッションによって保存されません。またはdbを使用して、後続の呼び出しをより効率的にします。

(たとえば、名前が付けられて再利用されるPostgresのプリペアドステートメントと比較してください(ただし、セッションレベルでのみ)。これは、dbがステートメントを再教育する必要がないことを意味します。また、ステートメントがすでに存在することも意味します。 「計画された」ので、セマンティクスだけでなく実行計画も学習され、速度を上げるために再利用されます。)

現在、MySQL用に、実際に使用できるものを書いています。後で投稿します。

于 2011-09-12T13:36:11.107 に答える