我正在使用预准备语句来执行更新。但由于某种原因,包含撇号的字符串不会更新。有没有办法可以更新字符串并保留撇号?
以下是我的查询示例
$query = "UPDATE items SET item_name = ? , item_price = ? WHERE id = ? ";
$stmt = $db->prepare($query);
foreach($items_and_prices as $id => $item_and_price){
$item = $item_and_price[0];
$price = $item_and_price[1];
$stmt->bind_param("sdi",$item, $price,$id);
$stmt->execute();
}
答案 0 :(得分:1)
你的字符串没有正确插入的原因是因为撇号是特殊字符。将特殊字符插入mysql数据库的最佳方法是首先以某种方式逃避它们。使用PHP,您有很多不同的选择。
我将在这里解释一些:
htmlentities();
将特殊字符转换为html实体。
用法:http://php.net/manual/en/function.htmlentities.php
htmlspecialchars();
将特殊字符转换为html特殊字符代码(即:
)
用法:http://php.net/manual/en/function.htmlspecialchars.php
addslashes();
使用反斜杠\
转义特殊字符
用法:http://php.net/manual/en/function.addslashes.php
示例:$safestring = addslashes($orginalstring);
会导致所有特殊字符都使用\
进行转义,从而导致'
成为\'
,从而可以在数据库中插入特殊字符
在输出使用stripslashes();
\
摆脱addslashes();
转义
答案 1 :(得分:0)
@MikeW @Phil htmlspecialchars做了这个伎俩。我需要使用htmlspecialchars包装值字符串。
例如
<input type=text name="category_name" value="<?php echo htmlspecialchars($category_name, ENT_QUOTES) ?>">
在htmlspecialchars之后指定ENT_QUOTES非常重要。没有它就行不通。
感谢您的帮助