php sql插入不工作
由于某种原因,我不熟悉php编码,我的代码没有在表中插入任何内容。 我对这个问题已经研究了几个小时了,但我一点也搞不懂 我使用php-my-admin生成了一个php脚本(不是当前版本的代码),但仍然不起作用php sql插入不工作,php,sql,sql-insert,insert-into,Php,Sql,Sql Insert,Insert Into,由于某种原因,我不熟悉php编码,我的代码没有在表中插入任何内容。 我对这个问题已经研究了几个小时了,但我一点也搞不懂 我使用php-my-admin生成了一个php脚本(不是当前版本的代码),但仍然不起作用 <? //data $ID = $_GET['ID']; $Type = $_GET['Type']; $Name = $_GET['Name']; $Addr = $_GET['Addr']; $Phone = $_GET['Phone']; $startDate = $_GE
<?
//data
$ID = $_GET['ID'];
$Type = $_GET['Type'];
$Name = $_GET['Name'];
$Addr = $_GET['Addr'];
$Phone = $_GET['Phone'];
$startDate = $_GET['startDate'];
$endDate = $_GET['endDate'];
$SRN = $_GET['SRN'];
//sql info
$user = $_GET['user'];
$pass = $_GET['pass'];
echo "
Hostname: $ID
Dev_Type: $Type
User_Name: $Name
User_addr: $Addr
User_Phone: $Phone
DATE_START: $startDate
Date_END: $endDate
Square Recipt Number: $SRN
";
// sql insert
$con=mysqli_connect("mysql1098.servage.net",$user,$pass,"RC_DB");
mysqli_query($con,"INSERT INTO RC_DB.Current_Rentals (Hostname,Dev_Type,User_Name,User_Addr,User_Phone,Date_Start,Date_End,STOLEN,Square_Recipt_Number)
VALUES ($ID,$Type,$Name,$Addr,$Phone,$startDate,$endDate,'0',$SRN)");
mysqli_close($con);
?>
您可能需要将插入的值用双引号括起来,或者用mysqli\u real\u escape\u字符串传递它们
mysqli\u query($con,“插入RC\u DB.Current\u Rentals(主机名、开发类型、用户名、用户地址、用户电话、开始日期、结束日期、被盗、平方号码)
值(“$ID\”、“$Type\”、“$Name\”、“$Addr\”、“$Phone\”、“$startDate\”、“$endDate\”、“'0'、“$SRN\”))
虽然mysqli_real_escape_字符串更好,因为它可以更好地防止SQL注入
编辑:根据Remco的第二条评论,请参阅以了解正确的操作方法。您需要在文本项周围使用撇号。这在过去也让我感到困惑。您没有向函数添加参数,而是引用将传递给mysql的文本。所以,$Name应该是“$Name”。请尝试以下类似操作:
mysqli_query($con, "INSERT INTO RC_DB.Current_Rentals
(Hostname,Dev_Type,User_Name,User_Addr,User_Phone,Date_Start,Date_End,STOLEN,Square_Recipt_Number)
VALUES ('$ID','$Type','$Name','$Addr','$Phone','$startDate','$endDate','0','$SRN')");
编辑:
我通常对PHP SQL语句进行故障排除的方法是回显文本,然后尝试在phpMyAdmin中运行代码。phpMyAdmin通常比PHP提供更好的错误消息
var $text = "INSERT INTO ... (...) VALUES ('$ID', '$Type'...)";
echo $text;
完成此操作后,您可以将此文本变量添加到mysqli_查询调用中,并查看其是否有效
var $text = "INSERT INTO ... (...) VALUES ('$ID', '$Type'...)";
mysqli_query($con, $text);
... 很抱歉,我是一个彻头彻尾的傻瓜,不会弄乱PHP变量吗?单引号就可以了,而且输入的工作量要少得多。如果单引号弄乱了变量,ie将插入文字字符$ID而不是$ID等于的数字。这就是为什么要使用mysqli\u real\u escape\u string
并将变量括在引号中。看见仅仅逃离它们是不够的。我想指出的是,你的代码是非常危险的,一场灾难即将发生。您正在将$\u GET
参数直接传递到数据库中(甚至您的数据库凭据也是$\u GET
参数,这是一个很大的禁忌!)。正如@Joe在他的回答中已经指出的,这段代码支持SQL注入。你应该认真听取他的建议,使用mysqli\u real\u escape\u string
或阅读以更好地理解风险和其他(更好的)技术来防止这种情况。