問題タブ [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 でデータを挿入する方法は? これら2つの配列の違いは何ですか?
bind_param($types, $var1, $var2, $var3,..)
クラスのメソッドとして、2番目のパラメーターの後mysqli_stmt
に一連のパラメーターを取得し$variables
ます(そこに配列を渡したい)。$variables
私の場合、その数は不明ですinsert($data)
。関数でリフレクションを使用したいです。http://php.net/manual/ru/mysqli-stmt.bind-param.php
混乱を避けるために、関数の不要な部分は示していません...
無関係なコードを削除
に示すように
この部分では、リフレクションを使用して、配列をオブジェクトのbind_param()
メソッドの2 番目のパラメーターに渡し$this->$stmt
ます。
1-option では mysqli をテーブルに挿入しません。
しかし、mysqli は 2 オプションを使用するとデータを挿入します。なんで?パラメータの数が不明なため、1 オプションで使用する必要があります。
Reflection と mysqli からどのように利益を得ることができますか?
これら 2 つのオプション (配列) の違いは何ですか?
php - クラスのプライベート メンバー変数を介して bindParam literate
User
プライベート メンバー変数と getter/setter 関数のみで呼び出されるクラスを作成します
だからprint_r($user)
私に次のようなものを与えるでしょう:
現在、PDO を使用してオブジェクトをデータベースに挿入しています (問題の一部ではなく機能しているため、接続部分はスキップします)。ここで、データを挿入する私の関数:
同様に動作します。ただし、php error_reporting を に変更するとE_ALL | E_STRICT
、ランタイムの厳密な警告も表示され、挿入コードによって行の警告strict standards only variables should be passed by reference
が生成されbindParam
ます。Googleに尋ねたところ、明らかに2つのステップでこれを行う必要があることがわかりました。
それらを新しい形式に変換した後、すべてが警告なしで機能します。
問題は、私のオリジナルUser-class
は20を超えるプライベートメンバー変数ではるかに大きく、このような他のクラスも持っているということです. だから私は変数を繰り返し処理し、それらを配列に保存し、bindParam
それらを配列として保存することを考えていました。しかし、その後foreach
、パブリック変数のみをループし、プライベート変数をループしないという問題に直面します...だから私の質問は次のとおりです。
bindParam
どういうわけかループと組み合わせることができますか?- もしそうなら、どうすればプライベートメンバー変数をループして保存できますか?
便宜上、どこでも同じ命名形式を使用しています。つまり、 with データベースの列には、withおよびas getter/setterfirstname
に対応するものがありますm_firstname
User-class
get_firstname()
set_firstname($firstname)
mysqli - 警告: mysqli_stmt::bind_param(): 変数の数が準備済みステートメントのパラメーターの数と一致しません 5
私はコーディングの初心者です。旅行代理店の新しいメンバー データを作成したばかりですが、このコードがうまく動作しないと混乱します。初めてこのコードをmysqliの4行に使用したときはうまく動作しましたが、複雑なデータを試したときは実行されませんでした。
ここにmysqliコードがあります:
更新mysqliメッセージをクリックすると、次のようになります。
これは私のサンプルphpコードです:
php - BindParam Foreach ループが機能しない
これは何らかの理由で機能しません。同じループは SELECT ステートメントでは正常に機能しますが、INSERT ステートメントでは機能しません。
php - PDO プリペアド ステートメントとバインド パラメータについて
経験から、そして準備されたステートメントを使用してパラメーターをバインドすることの利点も常に言われてきたため、コードでこれら2つの手法を常に使用してきましたが、これら2つの手法のそれぞれの目的を正確に理解したいと思います。
準備されたステートメントの私の理解から:
前のコードは、私が提案したクエリを使用して、データベースに一種のバッファーを作成する必要があります。私の理解では (そして私は非常に間違っている可能性があります)、前のコードは安全ではありません。文字列は実際の内容に$sql
応じて何でもかまいません。$id
$id
1; DROP TABLE myTable;--
私の理解から、これは私のパラメーターをバインドする場所です。代わりに次のことを行う場合:
データベースは、事前に sql ステートメントのすべての部分を正確に認識している必要があります:
SELECT
これらの列:*
FROM myTable
およびWHERE id =
「ユーザーが入力した変数」、および の場合"a variable that was input by the user" != a variable
、クエリは失敗します。
私の理解は正しいと言われた人もいれば、それは間違っていると言われた人もいます。間違っているか、正しいか、または何かが欠けているかどうかを誰かに知らせてもらえますか? すべてのフィードバックは大歓迎です!
php - 複数のパラメーターを持つ SQL クエリの準備 (mysqli)
この sql クエリの準備が無効である理由がわかりません。
結果は「ダメ」。それはどのように行われるべきですか?
am_measurements テーブルのデータは次のとおりです: https://mega.nz/#!tJEx0IiL!OoXHSVJh0A0kAVzYrcJKL6BGxktcZZWpOC26KV-Egao
@編集
問題の原因はわかりましたが、その理由と解決方法はわかりません。
以前のSQLクエリを削除すると、すべて問題ありません。
php - mysqli_query() は、パラメータ 2 が bind_param を持つ文字列であることを期待しています
ブラウザで archive.php を呼び出すとエラーが発生します: 警告: mysqli_query() はパラメータ 2 が文字列であると想定しています。