PHP 数据库获取变量


PHP database getting variables

我有以下代码行可以正确执行,除了一个障碍。它会将变量名称打印到数据库中。

我在我的一个 scrips 中使用此代码:

$con = mysql_connect("MyServer","MyDB","myPwd");
mysql_select_db("MyDB", $con);
$sql = "INSERT INTO `MyDB`.`Shipping` (`ID`, `FIRSTNAME`, `LASTNAME`, `ADDRESS1`, `ADDRESS2`, `CITY`, `STATE`, `ZIP`, `ORDERNUMBER`, `SHIPPINGTYPE`, `item1`, `item2`, `item3`, `item4`, `item5`, `item6`, `item7`, `item8`, `item9`, `item10`) VALUES (NULL, ''$first_name'', ''lname'', ''addr'', '''', ''city'', ''state'', ''zip'', ''ordernum'', '''', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'', ''0'');";
mysql_query("$sql");
mysql_close($con);

此代码将以下内容打印到数据库:

$first_name lname   addr        city    state   zip 0       0   0   0   0   0   0   0   0   0   0

请注意,打印的是变量名称,而不是变量的内容。如何让它打印出变量内容?

请注意,打印的是变量名称,而不是变量的内容

这是因为您没有将变量传递给 insert 语句,而是传递了 undefined(?) 常量; lname、addr 等。您应该将赋值的变量传入:(假设)$lname、$addr等。

此外,无需为 ID 列传入 NULL。如果设置为 auto_increment,数据库将为你创建此值。

您还应该利用表架构定义的默认列值,这样您最终就不会传递具有默认值的大量变量列表,例如,如果您有一个DEFAULT 0作为 item1、item2、item3 等架构的一部分,您只需进行以下插入:

$sql =
"INSERT INTO `MyDB`.`Shipping` (`FIRSTNAME`, `LASTNAME`, `ADDRESS1`, `CITY`, `STATE`, `ZIP`, `ORDERNUMBER`) VALUES ('$first_name', '$lname', '$addr', '$city', '$state', '$zip', '$ordernum');";

数据库将自动用 0 填充 item1、item2 等列。

正如cambraca所提到的,如果像这样将变量直接传递到查询中,则会面临SQL注入的风险。您应该阅读如何准备查询,这也将迫使您使用mysqli(与过时的mysql)api。或者更好的是,阅读PDO。

对于一个,您有一个引用问题。您似乎有双引号,然后转义了单引号。如果字符串是双引号,请不要转义单引号。

看来$first_name的价值应该起作用。这是确切的代码吗?因为如果你在整个事情周围有单引号,它会创建你描述的输出。

所有其他列都不是变量,因此很难知道您要执行的操作。如果您不打算使用它们,为什么要引用它们?

在您的mysql_query电话中,不要再次引用$sql

最后检查mysql_error()是否有错误。可能是您在数据库中看到了旧的东西,而您的代码根本无法正常工作。

考虑使用 PDO。它支持占位符,比本机 mysql_* 接口更好的安全性和更好的调试。

将插入语句更改为:

$sql = "INSERT INTO `MyDB`.`Shipping` 
  (`ID`, `FIRSTNAME`, `LASTNAME`, `ADDRESS1`, `ADDRESS2`, `CITY`, 
    `STATE`, `ZIP`, `ORDERNUMBER`, `SHIPPINGTYPE`, `item1`, `item2`, 
    `item3`, `item4`, `item5`, `item6`, `item7`, `item8`, `item9`, `item10`)
  VALUES (NULL, '{$first_name}', 'lname', 'addr', '', 'city', 'state',
    'zip', 'ordernum', '', '0', '0', '0', '0', '0', '0', '0',
    '0', '0', '0');";

此外,请检查您的$first_name是否正确分配了一个值。

我想

不要在 PHP 的字符串中使用内联变量,当你不需要时,你正在转义。试试这个:

$con = mysql_connect("MyServer","MyDB","myPwd");
mysql_select_db("MyDB", $con);
$sql = "INSERT INTO `MyDB`.`Shipping` (`ID`, `FIRSTNAME`, `LASTNAME`, `ADDRESS1`, `ADDRESS2`, `CITY`, `STATE`, `ZIP`, `ORDERNUMBER`, `SHIPPINGTYPE`, `item1`, `item2`, `item3`, `item4`, `item5`, `item6`, `item7`, `item8`, `item9`, `item10`) VALUES (NULL, '".$first_name."', 'lname', 'addr', '', 'city', 'state', 'zip', 'ordernum', '', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0');";
mysql_query($sql);
mysql_close($con);

与其使用''$first_name''不如用 '"$first_name'" 替换它,其他变量也是如此。