Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将数据插入MySQL数据库_Php_Mysql_Sql - Fatal编程技术网

使用PHP将数据插入MySQL数据库

使用PHP将数据插入MySQL数据库,php,mysql,sql,Php,Mysql,Sql,我正在向查询传递一个数组。然而,我似乎无法添加每个值 所传递的数组为: Array ( [name] => Name [address_1] => Address 1 [address_2] => Address 2 [address_3] => Address 3 [address_4] => Address 4 [post_code] => Post

我正在向查询传递一个数组。然而,我似乎无法添加每个值

所传递的数组为:

Array ( 
        [name] => Name 
        [address_1] => Address 1 
        [address_2] => Address 2 
        [address_3] => Address 3 
        [address_4] => Address 4 
        [post_code] => Post COde 
        [proptype] => rent 
        [style] => house 
        [beds] => 1 
        [bathrooms] => 1 
        [garden] => 1 
        [furnished] => yes 
        [deposit] => Deposit 
        [available] => 10/18/2013 
        [description] => Description 
      )
下面是我的代码:

    foreach ($data as $column => $value) {
            $columns .= ($columns == "") ? "" : ", ";
            $columns .= $column;
            $values .= ($values == "") ? "" : ", ";
            $values .= $value;
    }

    $sql = "INSERT INTO $table ($columns) VALUES ($values)";

    echo "--->" . $sql;
    exit;
我知道我需要把每个值都括起来,但我看不出在哪里需要这样做

谢谢你抽出时间

试试看:

foreach ($data as $column => $value) {
    $columns .= ($columns == "") ? "" : ", ";
    $columns .= $column;
    $values .= ($values == "") ? "" : ", ";
    $values .= "'" . $value . "'";
}

您还可以使用一些内置php函数:

// join column names with a comma
$columns = join(array_keys($data),',');

// pass every value through mysql-escape and join the values with quotes and commas
$values = join(array_map("mysql_real_escape_string",array_values($data)),'","');

// use the produced strings; make sure you wrap the values string with double quotes
$sql = "INSERT INTO $table ($columns) VALUES (\"$values\")";
供参考: , , ,


出于安全原因,我使用mysql\u real\u escape\u字符串。

t-coder感谢您的快速回复。在你的帮助下,我设法使它工作起来了。我添加了:foreach($column=>$value){$columns.=($columns==“”)?“”:“;$columns.=$column;$values.=($values==“”)?“”:“;$values.=””;}$sql=“插入$table($columns)values($values)”;除非您的值都是数字,否则必须将它们括在单引号中,“这对数字值也是安全的。”插入数字字段时,1'将转换为1!请使用!PDO!别问为什么,就去做吧。您可以稍后阅读。同意@nietonfir:-)我认为使用此查询也不会添加数据。。。看看我的答案。。。可能是我指定的原因是发生了什么…@FahimParkar我很确定如果值与列类型匹配,查询将工作。关于你的答案,我不完全明白,但无论如何,你使用“INSERT INTO tableName VALUES$value;”的建议只有在数组包含所有列时才有效。为什么要插入?for循环将转到insert name。。正确的?现在,当循环尝试插入名称时,此时rest字段为空。。。若OP将所有字段设置为非空,那个么mysql将抛出异常。。。这只是我的想法。你怎么想?@FahimParkar循环是用来构造查询的,而不是在每次迭代中运行它。该查询应该在构造完成后的最后运行一次。希望这有意义。哎呀,我完全错过了…:D:P.我会先删除我的答案,然后再获得否决票