无法从数组中将字符插入mysql列

时间:2014-01-16 17:15:54

标签: php mysql arrays

我有以下代码,以便从上一页捕获数据。它的工作正常,数据传递正确,只是问题是唯一有字符的变量($ itemName)。 我根本无法在mysql列中插入。它不是类型设置或字符集。我怀疑文本是来自数组的事实。有什么想法吗?

if(isset($_POST["cantidad"]) && count($_POST['cantidad'])>0) {

    foreach($_POST["cantidad"] as $key => $value) {
        $cantidad = $value;
        $value = $_POST["cantidad"][$key];
        $idItem = $_POST['hiddenField'][$key];
        $itemName = $_POST['hiddenName'][$key];
        $query = "INSERT INTO `inventarioStat` SET `fecha` = $timestamp, `idItem` = $idItem, `nombreItem` = $itemName, `cantidad` = $value";
        ///// this section is to check do data pass true and they do
        echo "<br>";
        echo "value:" . $value . "<br>";
        echo "id:" . $idItem . "<br>";
        echo "name:" . $itemName . "<br>";

         mysql_query($query);
    }     

}

echo "<br>";

1 个答案:

答案 0 :(得分:6)

$query = "INSERT INTO `inventarioStat` SET `fecha` = $timestamp, `idItem` = $idItem, `nombreItem` = $itemName, `cantidad` = $value";

此行不正确且非常不安全。问题是您没有在SQL查询中引用字符串。您需要$itemName值附近的引号。

您还需要在此处转义值。这段代码对SQL注入很开放。如果你使用它,你可能会被黑客攻击。

试试这个:

foreach($_POST["cantidad"] as $key => $value) {
    $cantidad = $value;

    $value = mysql_real_escape_string($_POST["cantidad"][$key]);
    $idItem = mysql_real_escape_string($_POST['hiddenField'][$key]);
    $itemName = mysql_real_escape_string($_POST['hiddenName'][$key]);

    $query = "INSERT INTO `inventarioStat` SET `fecha` = '$timestamp', `idItem` = '$idItem', `nombreItem` = '$itemName', `cantidad` = '$value'";

    mysql_query($query);
}

此代码更好,但并不完美。它更安全,但不是100%安全。

您应该升级到使用PDOMySQLi和预备语句(PDO docsMySQLi docs)。