没有在mysqli中更新撇号的字符串

时间:2014-10-08 00:27:14

标签: php mysqli prepared-statement

我正在使用预准备语句来执行更新。但由于某种原因,包含撇号的字符串不会更新。有没有办法可以更新字符串并保留撇号?

以下是我的查询示例

$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();

    }

2 个答案:

答案 0 :(得分:1)

你的字符串没有正确插入的原因是因为撇号是特殊字符。将特殊字符插入mysql数据库的最佳方法是首先以某种方式逃避它们。使用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非常重要。没有它就行不通。

感谢您的帮助