問題タブ [mysqli]
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 - 準備済みステートメントを使用した変数パラメーター/結果バインディング
まとめようとしているプロジェクトでは、PHP のオブジェクト リレーショナル マッピング ソリューションを作成して実装しました。懐疑論者や夢想家が「いったいどうやって?」と叫ぶ前に、リラックスしてください-私は遅い静的バインディングを機能させる方法を見つけていません-私はできる限り最善の方法でそれを回避しています.
いずれにせよ、私は現在クエリにプリペアド ステートメントを使用していません。なぜなら、bind_params()
またはbind_result()
メソッドに可変数の引数を渡す方法が思いつかなかったからです。
可変数の引数をサポートする必要があるのはなぜですか? 私のモデルのスーパークラス (私のソリューションをハッキングされた PHP ActiveRecord 志望者と考えてください) は、クエリが定義されている場所であり、たとえば、find() メソッドは、バインドする必要があるパラメーターの数を認識していません。 .
ここで、引数リストを作成して文字列を eval() に渡すことをすでに考えましたが、その解決策はあまり好きではありません。独自のセキュリティ チェックを実装してステートメントを渡すだけです。
これを実現する方法について、何か提案 (または成功事例) がある人はいますか? この最初の問題を解決するのを手伝ってくれれば、結果セットのバインドに取り組むことができるかもしれません (テーブル構造を決定するための最初のクエリが必要な場合は、より困難になるか、少なくともリソースを大量に消費すると思われます)。
php - mysqli または PDO - 長所と短所は何ですか?
私たちの場所では、プリペアド ステートメントやトランザクション サポートなどのために、mysqli と PDO の使用に分かれています。一部のプロジェクトでは一方を使用し、一部のプロジェクトでは他方を使用します。別の RDBMS に移行する現実的な可能性はほとんどありません。
私が PDO を好むのは、準備済みステートメントに名前付きパラメーターを使用できるという 1 つの理由からです。私の知る限り、mysqli は使用できません。
プロジェクトを統合して 1 つのアプローチのみを使用する際に、標準として 1 つを選択することに他に長所と短所はありますか?
php - MySQLi の使用 - クエリを閉じるのに適しています
変数の使用を最小限に抑える習慣があります。したがって、次のことによって得られる利点があるかどうか疑問に思っています。
私が正しければ、例1は、関連付けられているメモリを解放する必要がある再割り当て時に、そのままより効率的であるはずです$query
。ただし、関連付けられたメモリを解放するunset
メソッド ( ) があります。これは同じことですか?MySQLi_Result::free()
::free()
結果に関連付けられたメモリを解放するために呼び出さずunset
に、変数を再割り当てすることで同じことをしているのですか? この種のことをログに記録する方法がわかりません - 誰かアイデアがありますか?
php - PHP + MySQL +ストアドプロシージャ、「out」値にアクセスするにはどうすればよいですか?
PHPを使用したmysqlのストアドプロシージャに関係するドキュメントが大幅に不足しています。現在、PHPを介して呼び出すストアドプロシージャがありますが、outパラメータの値を取得するにはどうすればよいですか?
php - mysqli_stmt :: num_rows()が間違った値を返す
mysqliクラスとプリペアドステートメントを使用して、PHPでデータベースハンドラークラスを作成していました。結果を印刷しようとしていました。すぐには機能しなかったので、デバッグを行うことにしました。num_rows()
クラスのメソッドを使用しようとしましたmysqli_statement
が、0が返され続けました。テストコードの一部を記述して、何が問題になっているのかを確認できるようにしました。その後、必要なデータを返すことができましたが、num_rows()
実際にデータを選択して取得している場合でも、メソッドは0を返します。コードは次のとおりです。
期待される結果は次のとおりです。
そして実際の結果は次のとおりです。
なぜこれなのか誰か教えてもらえますか?
php - 複数の/ネストされた MySQLi ステートメントを使用することは可能ですか?
前のステートメントMySQLi prepared statement
の呼び出し内にa を持つことは可能ですか? fetch()
そうでない場合、それを回避する最善の方法は何ですか?
コード例:
php - PHP-MySQLとMySQLiのどちらが最速ですか?
この二分法を直接体験した人がいるかどうか知りたいのですが。いくつかのブログでは、mysql拡張機能はmysqliよりも高速であると述べています。これは本当ですか?
そして、私は速度についてだけ尋ねています。mysqliには古い拡張機能にはない機能があることを私は知っています。
php - MySQLのnull以外の列に空の文字列がありますか?
私は、PHPからMySQLを実行するために、標準のmysql_connect()、mysql_query()などのステートメントを使用していました。最近、私は素晴らしいMDB2クラスの使用に切り替えています。それに加えて、プリペアドステートメントを使用しているので、入力やSQLインジェクション攻撃を逃れることを心配する必要はありません。
しかし、私が直面している問題が1つあります。null以外として指定されている(つまり、NULL値を許可しない)VARCHAR列がいくつかあるテーブルがあります。古いMySQLPHPコマンドを使用すると、次のようなことが問題なく実行できます。
ただし、次のようなクエリがある場合:
そして、PHPでは次のようになります。
null value violates not-null constraint
これにより、エラー「 」がスローされます
一時的な回避策として、$value
空かどうかを確認し、 " "
(単一のスペース)に変更しますが、これは恐ろしいハックであり、他の問題を引き起こす可能性があります。
代わりにNULLを挿入しようとせずに、プリペアドステートメントで空の文字列を挿入するにはどうすればよいですか?
編集:プロジェクトが大きすぎてコードベース全体を調べ、空の文字列 ""を使用しているすべての場所を見つけて、代わりにNULLを使用するように変更します。私が知る必要があるのは、標準のMySQLクエリが「」とNULLを2つの別個のものとして扱うのに(私が正しいと思うように)、プリペアドステートメントが「」をNULLに変換する理由です。
「」とNULLは同じものではないことに注意してください。たとえば、期待どおりの代わりにSELECT NULL = "";
戻ります。NULL
1
php - 配列を mysqli prepare にバインドする方法はありますか
任意の量の変数を使用して、多数のストアド プロシージャのいずれかを実行するクラスを作成しようとしています。
私はphpとmysqliを使用しています
- 私のクラスは配列を列挙し、要素がある場合はその数に基づいて文字列を構築します
CALL spTestLogin(?,?)
たとえば、このようなものを与える次のようなものを使用して、配列からの入力をバインドする必要があります。
$stmt->bind_param($this->paramTypes,$this->paramValues);//paramValues は私の配列です
それがうまくいけば、結果を得るために取り組むことができます
何か案は
php - データベースで実行されるように準備されたクエリを表示する方法はありますか?
重複の可能性:
PDO プリペアド ステートメント
PHP で mysqli 拡張機能を使用していますが、サーバー上で実行されるように準備されたクエリを確認する方法はあるのでしょうか。たとえば、クエリは次のようなものです。
しかし、次のように、値が入力された後にクエリを表示したい: