問題タブ [bindparam]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - ブール値のバインドに関する bind_param の問題
mysqli_stmt::bind_param
PHP5 で使用するブール値のバインドに問題があります。
SQL クエリは次のとおりです。
ここで、'read' は 0 または 1 の tinyint です。したがって、bind_param にリストするタイプは次のとおりです。
「sdsb」と「sdss」も試しましたが、何も機能していないようで、常に次のメッセージが表示されます。
警告: mysqli_stmt::bind_param(): 変数の数が、準備されたステートメントのパラメーターの数と一致しません
ステートメントの読み取りフィールドを削除すると、すべて正常に機能します。私はこれでアイデアを使い果たしました。確かにbind_paramはブール値で動作しますか?
php - mysqlPDOLIKEをバインドする方法
このクエリでは
'$partial%'
変数をPDOにバインドしようとしています。これが最後にどのように機能するかわからない%
。
それでしょうか
どこ:partial
にバインドされています$partial="somet"
またはそれは
どこ:partial
にバインドされています$partial="somet%"
それともまったく違うものでしょうか?
php - bindValueまたはBindParamがプリペアドステートメントを変更しないのはなぜですか?
テーブルユーザーに行を追加する関数を作成するために最新のphpを使用します。
addUser関数を実行すると、これはmysqlログファイルで実行されたクエリです。
ご覧のとおり、:varnameが適切な値に置き換えられていません。私は何が欠けていますか?
bindValueとbindParamの両方を試しましたが、同じ結果が得られました。
アップデート
:username
変更し:password
てに変更しても、?,?
使用
bindValue(1,$username)
しbindValue(2,$password)
ても同じ結果が得られます。実際に実行されるクエリ?,?
には、実際の変数ではなく、まだ含まれています。
php - PDO-> bindParam、PDO-> bindValue、PDO-> closeCursor
これまで使用してきPDO->bindParam
ましたが、マニュアルを読んでいるうちに、値でパスするのがわかりPDO->bindValue
ますが、参照でパスするのはこれだけですか?PDO->bindValue
PDO->bindParam
再び私が見つけたマニュアルを読んでいる間:PDO->closeCursor
私はそれをマークされた場所に置くべきですか?オプション/自動的に呼び出されますか?特定のドライバーだけがそれを必要としているようです。それを必要としない/サポートしていないドライバーでそれを呼び出すと、エラーが発生しますか?MySQLはどうですか?
php - php、mysqli-stmt.bind-param]:型定義文字列の要素数がバインド変数の数と一致しません
スクリプトを実行すると、次のエラーが発生します。
警告:mysqli_stmt :: bind_param()[mysqli-stmt.bind-param]:型定義文字列の要素の数が、205行目のC:\ wamp \ www\records.phpのバインド変数の数と一致しません
警告:mysqli_stmt :: execute()[mysqli-stmt.execute]:(HY000 / 2031):行206のC:\ wamp \ www\records.phpのプリペアドステートメントのパラメーターにデータが提供されていません
どうすれば修正できますか?bind_paramからパラメーターを数えましたが、私にとっては問題ないようです...
php - mysqliプリペアドステートメント、bindparamsを使用してNULLを挿入
MYSQLIbind_paramを使用して列にNULLを挿入できるかどうかを誰かが知っていますか。
で列をnullに設定したい場合がありますbind_param
。そのようです...
明らかに、これは文字列として列にNULLを書き込むだけです。試しましたが、機能null
し\0
ません。
$column2
送信する値と、代わりに実際のnull値を等しくすることができる値があるかどうかを知りたいです。
それ以外の場合は、タイプリストとパラメーターリストを動的に作成し、を使用call_user_func_array
してバインディングを作成し、列がnullの場合に列が書き込まれないようにする必要があります。これは可能ですが、多くの厄介な余分なコードが発生するため、これを回避できるかどうか疑問に思っていました。
php - 更新クエリのステートメントを準備するにはどうすればよいですか?
次のコードを使用したmysqliクエリがあります。
ただし、すべてのデータはHTMLドキュメントから抽出されるため、エラーを回避するために、プリペアドステートメントを使用します。PHPのドキュメントbind_param()
を見つけましたが、UPDATEの例はありません。
php - mysqli を使用して SQL インジェクションを防止する場合、NULL または CURRENT_DATE を設定する方法は?
mysqli
PHPライブラリでは、メソッドbind_param()
でパラメーターをクエリにバインドします。 bind_param()
の最初の引数はtypes
、各文字がデータ型パスを表す文字列です。たとえば、文字列は 's' です。
パラメータとして 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 つです。このようなトリガーは、コードが正しく維持される可能性がほとんどなく、定期的なメンテナンスの悪夢になります。
php - PDO で空の文字列の代わりに NULL を挿入する
Null 可能なフィールドがいくつかあるテーブルがあり、ユーザーが HTML フォーム フィールドに何も入力しない場合、空の文字列ではなく NULL をそのフィールドに挿入したい (これらのテーブルの SELECT の一部が後で次のような条件を使用するため、これは重要です)。 WHERE x IS NOT NULL として)。
ただし、このバージョンの bindParam コードは、NULL の代わりに空の文字列を null 許容フィールドに挿入します。
私はかなり読んでいて、これが代わりにフィールドに null を挿入する答えであることがわかりました:
ただし、これは、null 許容フィールドに渡されるすべてのパラメーターを事前にチェックして、それらが空であるかどうかを判断する必要があることを意味しPDO::PARAM_NULL
ますPDO::PARAM_STR
。私はもちろんこれを行うことができますが、PDO が空の文字列に遭遇した場合に代わりに null を挿入するように指示する設定があることを望んでいました。
私はこれに出くわしました
しかし、それは効果がなく、さらなる調査により、これは途中ではなく、途中の記録にのみ影響すると考えています.
変数の事前チェック以外のオプションはありますか?