如何从数组中插入数据

时间:2017-08-31 11:27:56

标签: php mysqli

我想通过数组在数据库中发送数据,但它没有插入。

<?php
if(isset($_POST['submit'])){
    $name=$_POST['name'];
    $last=$_POST['last'];
    $des=$_POST['des'];
    $insData =  array( $name,$last,$des);
    foreach ($insData as $key => $val){
        echo $val."<br>";
    }
    $v  = implode(", ", $val);
    $query=mysqli_query($connect,"insert into name(name,last,des) VALUES ('$v')");
    if($query){
      echo "ok data";
    }
    else {
    echo mysqli_error($connect);
    }
}   
?>

3 个答案:

答案 0 :(得分:1)

看看这一行:

$query=mysqli_query($connect,"insert into name(name,last,des) VALUES ('$v')");

如果$v等于说delboy1978uk,something,somethingelse,那么您的SQL将如下所示:

$query=mysqli_query($connect,"insert into name(name,last,des) VALUES ('delboy1978uk,something,somethingelse')");

如您所见,这只是一个字符串。所以你也需要用一些单引号破碎。

$array = ['delboy1978uk', 'something', 'somethingelse'];
$v  = implode("','", $array);
echo $v;

将输出:

delboy1978uk','something','somethingelse

意味着您的SQL字符串现在应该有效。

请记住,您最好使用绑定参数来防止SQL注入!见http://php.net/manual/en/mysqli-stmt.bind-param.php

答案 1 :(得分:0)

你可以试试这个

简单但不安全:

<?php
    if(isset($_POST['submit'])){
        $name=$_POST['name'];
        $last=$_POST['last'];
        $des=$_POST['des'];
        $insData =  array( $name,$last,$des);
     foreach ($insData as $key => $val) {
        echo $val."<br>";
     }
     $v  = implode("', '", $insData);
        $query=mysqli_query($connect,"insert into name(name,last,des) VALUES ('$v')");
        if($query){
            echo "ok data";
        }
        else
        {
            echo mysqli_error($connect);
        }
    }   
?>

答案 2 :(得分:0)

您的代码格式不正确(请参阅PSR-1 and PSR-2)。虽然您添加了一些错误处理,但您忽略了告诉我们您编写的代码告诉您的内容。

您向我们展示的代码至少有两个原因不会插入数据:

  • $ connection永远不会被初始化
  • 因为您的输出已经显示,SQL字符串是无意义的。如果您将字符串发送到屏幕而不是(或同样)数据库,您将看到如下内容:

    插入名称(姓名,姓氏,des)VALUES('Zeenat,Nazir,des')

但您的查询应该是以下形式:

insert into name(name,last,des) VALUES ('Zeenat', 'Nazir', 'des')

您的代码容易受到SQL注入攻击。

不考虑连接问题,构建SQL的更好方法是:

 $sql="insert into name(name,last,des) VALUES ('"
     . mysqli_real_escape_string($connection, $_POST['name']) . "','"
     . mysqli_real_escape_string($connection, $_POST['last']) . "','"
     . mysqli_real_escape_string($connection, $_POST['des']) . "')";