【问题标题】:how to insert multiple variable in databse table through sql?如何通过sql在数据库表中插入多个变量?
【发布时间】:2014-02-25 10:59:45
【问题描述】:

我想在我的数据库表中插入多个变量为VALUES。这是我的代码

include 'database_connect.php';

$namef=  $_post["fnam"];
$lnamel= $_post["lnam"];
$addres= $_post["addres"];
$mail= $_post["email"];
$countr= $_post["countr"];
$db= $_post["do"];
$m= $_post["m"];
$pasword= $_post["pas"];

$insertSql= "INSERT INTO abcd(Id, First_name, Last_name, Address, Email, Country, Date_of_birth, Mobile_number, Password, Status) 
VALUES(NULL,'$namef', '$namel', '$addres', '$mail', '$countr', '$db', '$m', '$pasword', '0')";

if(mysql_query($insertSql))
    header("location: login_success.php");
else
    header("location: wrong_inf.php");

这里仅在 Id 和状态字段中插入,所有其他字段都为空,即使我在这些输入中提供了一些输入。

我不知道如何解决这个问题。

注意:这里Idinteger 类型,statustinyint 类型,所有其他字段都是varchar 类型。

【问题讨论】:

  • 试试 print_r($_POST) ,它说了什么?
  • 尝试将$_post[""]更改为$_POST['']
  • 您将 ID 设置为 NULL 似乎很奇怪。这真的是你想做的吗?
  • 请务必仔细阅读并理解这一点:stackoverflow.com/questions/60174/… 这将有助于防止您的数据库被黑客入侵。

标签: php mysql sql sql-server


【解决方案1】:

要使用 post 变量,您需要使用

$_POST['fieldname']

而不是像

$_post["fieldname"]

因为$_POST数组在php中是区分大小写的

同时使用mysql_error() 和继续检查查询是否正确执行

$query = mysql_query($insertSql) or die(mysql_error());

if($query)
  {
   // updated
  }
else
   {
    // not updated
   }

最后我建议你不要使用mysql_* 函数并开始使用mysqli_* 函数或PDO

【讨论】:

    【解决方案2】:

    PHP 变量区分大小写

    试试

    $namef=$_POST["fnam"];
    $lnamel=$_POST["lnam"];
    

    等....

    【讨论】:

      【解决方案3】:

      $_REQUEST$_POST而不是$_post

      在调用header("..");后也使用exit,在sql执行前使用escape来防止注入

      你修改后的代码是

      include 'database_connect.php';
      
      $namef=  $_REQUEST["fnam"];
      $lnamel= $_REQUEST["lnam"];
      $addres= $_REQUEST["addres"];
      $mail= $_REQUEST["email"];
      $countr= $_REQUEST["countr"];
      $db= $_REQUEST["do"];
      $m= $_REQUEST["m"];
      $pasword= $_REQUEST["pas"];
      
      $namef = mysql_real_escape_string($namef);
      $lnamel = mysql_real_escape_string($lnamel);
      $addres = mysql_real_escape_string($addres);
      $mail= mysql_real_escape_string($mail);
      $countr = mysql_real_escape_string($countr);
      $db = mysql_real_escape_string($db);
      $m = mysql_real_escape_string($m);
      $pasword = mysql_real_escape_string($pasword);
      
      $insertSql= "INSERT INTO abcd(Id, First_name, Last_name, Address, Email, Country, Date_of_birth, Mobile_number, Password, Status) 
      VALUES(NULL,'$namef', '$namel', '$addres', '$mail', '$countr', '$db', '$m', '$pasword', '0')";
      
      if(mysql_query($insertSql))
      {
          header("location: login_success.php");
          exit;
      }
      else
      {
          header("location: wrong_inf.php");
          exit;
      }
      

      注意: mysql_* 现已弃用,用户 mysqli_*PDO

      【讨论】:

        【解决方案4】:

        您可以先在构建 SQL 字符串后写出它,以查看是否正确添加了值:

        echo $insertSql;
        

        如果那里有空白项,请检查您的 $_POST 数据是否正确传递:

        var_dump($_POST);
        

        (正如克里希纳所指出的,当您应该使用大写 $_POST 时,您使用的是小写 $_post。)

        此外,尽管您没有询问,但您不应该在未先对其进行清理的情况下将数据直接从 $_POST 数组写入您的数据库。最好的办法是使用 PDO,但如果您要使用 mysql_* 函数,则在您写入数据库的每个项目上使用 mysql_real_escape_string,如下所示:

        $sql = 'INSERT INTO `table` (`column`) VALUES ("' . mysql_real_escape_string($_POST['item']) . '")';
        

        【讨论】:

          【解决方案5】:

          其中一个错误是未定义变量是 sql 中的$namel

          $lnamel替换它

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-02
            • 2019-10-21
            • 1970-01-01
            • 1970-01-01
            • 2018-08-16
            • 1970-01-01
            相关资源
            最近更新 更多