MySQL插入双引号PHP

时间:2018-02-06 03:56:00

标签: php mysql mysqli prepared-statement bindparam

我正在使用以下准备的语句插入MySQL。如果我尝试插入包含“(双引号)$descrip的内容,则此处插入停止。

示例: 试图插入16" Solid Steel Tube 表格行的输入仅显示16,并在“(双引号)处停止,并且不显示$descrip的其余部分。

我做错了什么?

$stmt = $db->prepare("INSERT INTO line_items (quote_id, part, descrip, qty, price, net, notes, datasheet) VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssssss", $quote_id, $part, $descrip, $qty, $price, $net, $notes, $datasheet);

foreach($_POST['part'] as $i => $item) {

    $part       = $item;
    $descrip   = $_POST['descrip'][$i];  //This wont enter something with double qutoes such as 16" Solid Steel Tube
    $qty        = $_POST['qty'][$i];
    $price      = $_POST['price'][$i];
    $net        = $_POST['net'][$i];
    $notes      = $_POST['notes'][$i];
    $datasheet  = $_POST['datasheet'][$i];

    $stmt->execute();
}   

修改 仅供参考 - 我从数据库中的另一个表中选择$descrip,该表在行中正确显示16" Solid Steel Tube。当我尝试通过我准备好的语句将此项目复制到另一个表中时,它将无法正确插入。

1 个答案:

答案 0 :(得分:4)

根据你的提示...

  

我从数据库中的另一个表中选择$descrip,该表正确地将其作为 '16“Solid Steel Tube '。当我尝试将此项目复制到另一个表格中时通过我准备的声明,即它不会正确插入。

我想你是以这样的形式使用这个值(但可能不完全是)

<input type="text" value="<?= $descrip ?>" name="descrip[]">

这里的问题是呈现的HTML看起来像

<input type="text" value="16" Solid Steel Tube" name="descrip[]">

请注意value属性现在在“16”之后有一个结束引用?

您需要对值进行编码,以便在HTML中安全使用。尝试...

<input type="text" value="<?= htmlspecialchars($descrip) ?>" name="descrip[]">

这将呈现为

<input type="text" value="16&quot; Solid Steel Tube" name="descrip[]">

您的PHP脚本在提交时仍会以未编码的字符串形式接收它。