如何通过sql在数据库表中插入多个变量?
Posted
技术标签:
【中文标题】如何通过sql在数据库表中插入多个变量?【英文标题】:how to insert multiple variable in databse table through 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 和状态字段中插入,所有其他字段都为空,即使我在这些输入中提供了一些输入。
我不知道如何解决这个问题。
注意:这里Id
是integer
类型,status
是tinyint
类型,所有其他字段都是varchar
类型。
【问题讨论】:
试试 print_r($_POST) ,它说了什么? 尝试将$_post[""]
更改为$_POST['']
您将 ID 设置为 NULL 似乎很奇怪。这真的是你想做的吗?
请务必仔细阅读并理解这一点:***.com/questions/60174/… 这将有助于防止您的数据库被黑客入侵。
【参考方案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
替换它
【讨论】:
以上是关于如何通过sql在数据库表中插入多个变量?的主要内容,如果未能解决你的问题,请参考以下文章
SQL 从包含表名、列名和值列映射的数据表中将数据插入到多个表中,可以在源中更改
sql中如何使一列中的多个重复数据只显示一次, 求大神指导,使得图中的班简名重复的只显示一次。
如何使用 PHP、SQL 和 Microsoft Access 将另一个表中的 select max 函数和用户输入的变量插入表中?