Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.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 sql插入不工作_Php_Sql_Sql Insert_Insert Into - Fatal编程技术网

php sql插入不工作

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

由于某种原因,我不熟悉php编码,我的代码没有在表中插入任何内容。 我对这个问题已经研究了几个小时了,但我一点也搞不懂

我使用php-my-admin生成了一个php脚本(不是当前版本的代码),但仍然不起作用

<?

//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
或阅读以更好地理解风险和其他(更好的)技术来防止这种情况。