如何使用mysqli_bind_param预处理语句插入混合字符串

时间:2016-09-14 10:06:54

标签: php mysql mysqli sqlbindparameter

现在一直在寻找答案,但似乎无法找到任何答案。

我正在寻找一种方法来使用mysqli_bind_param将一行插入表中,其中param(?)是更大字符串的一部分。 这是我的代码:

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

我正在寻找一种方法来添加" $ product_editPrice_was"和" $ product_editPrice_now"进入行。

我可以创建一个字符串:

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

然后绑定,但我感兴趣,如果有一个更简单的方法?例如:

[]parentclass

提前致谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

  

但如果有更简单的方法,我感兴趣吗?

这是一个有趣的问题。在某种程度上。

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

显然是创建文本字符串的最简单方法。虽然这个文本字符串可以通过占位符的常规方式绑定到查询。此外,您将SQL和数据相互分离,这将有助于您更好地组织代码。

所以我认为有些事情你不应该变得更简单。因为这样的尝试可能会使事情变得更加复杂。