2016-09-14 2 views
1

を使って混合文字列を挿入する方法は、しばらくの間は答えを探していましたが、何も見つからないようです。mysqli_bind_paramプリペアドステートメント

私はmysqli_bind_paramを使用してテーブルに行を挿入する方法を探しています。ここでは、パラメータ(?)は大きな文字列の一部です。 これは私のコードです:行に「$ product_editPrice_was」と「$ product_editPrice_now」を追加する方法を探して

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, 'Price edited from ? to ?')"; 
$stmt = mysqli_prepare($DB_conn, $query); 
mysqli_bind_param($stmt, "sss", $orderID, $product_editPrice_was, $product_editPrice_now); 
mysqli_stmt_execute($stmt); 

イム。

私は、文字列を作成できます。

$text = "Price edited from $product_editPrice_was to $product_editPrice_now" 

をして、それを結合するが、簡単な方法がある場合、私は興味がありますか?例:

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, 'Price edited from ' ? ' to ' ?)"; 

ありがとうございます。

+1

'price_before'、' price_after'の2つのフィールドを作成し、それらに挿入します。 –

+0

ありがとう@u_mulderフィールドactivity_text_descは、他のアクティビティ(たとえば、 "User deleted xyz"、他のコードで扱われる)に使用されます。私は一度にフィールドに複数の変数をバインドするための全体的なソリューションを探しています。 –

+0

答えは__NO__です。挿入されたデータの一部としてpalceholdersを使用することはできません。 –

答えて

1

主な質問 - いいえ、挿入された値の一部をプレースホルダに置き換えることはできません。

解決策は以下のとおりです。

$query = "INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, ?)"; 
$stmt = mysqli_prepare($DB_conn, $query); 
$text = "Price edited from $product_editPrice_was to $product_editPrice_now"; 
mysqli_bind_param($stmt, "ss", $orderID, $text); 
mysqli_stmt_execute($stmt); 

別の解決策はprice_beforeprice_afterなどのさまざまな分野に作成することです。

しかし、あなたはそれを行うことができない場合は、例えばmysqlのCONCAT()とプレースホルダを使用して試すことができますが、私はそれが動作するかどうかわからない:

INSERT INTO CDBusers_activity (order_ID, activity_text_desc) VALUES (?, CONCAT('Price edited from ', ?, ' to ', ?) 
1

しかしがある場合、私は興味がありますより簡単な方法?

これは興味深い質問です。方法で。

$text = "Price edited from $product_editPrice_was to $product_editPrice_now"; 

は、明らかにテキスト文字列を作成するための最も簡単な方法です。このテキスト文字列は、通常の方法でプレースホルダでクエリにバインドできますが、また、SQLとデータを分離してコードを整理するのに役立ちます。

だから私はあなたが簡単にしてはいけないことがあると思います。そのような試みは事態をより複雑にする可能性が高いためです。

関連する問題