代码之家  ›  专栏  ›  技术社区  ›  RonnieT

MySQL插入双引号PHP

  •  2
  • RonnieT  · 技术社区  · 7 年前

    我正在使用下面准备好的语句插入MySQL。如果我尝试插入 $descrip 包含“(双引号)的插入将在此点停止。

    例子: 正在尝试插入 16" Solid Steel Tube 表格行中的条目仅显示 16 并在“(双引号)处停止,不会显示 $描述 .

    我做错了什么?

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

    编辑: 仅供参考-我正在选择 $描述 从数据库中的另一个表中获取,该表的行中正确地包含 16“实心钢管 . 当我试图通过我准备好的语句将此项复制到另一个表中时,它将无法正确插入。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Phil    7 年前

    根据你的提示。。。

    我正在选择 $descrip 从数据库中的另一个表中获取,该表的行中正确地包含 ‘16’实心钢管 '. 当我试图通过我准备好的语句将此项复制到另一个表中时,它将无法正确插入。

    我想您正在这样的形式中使用此值(但可能不完全如此)

    <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脚本在提交时仍将作为未编码字符串接收。