1

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

我在我的一个脚本中使用了这段代码:

$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

请注意,打印的是变量名称,而不是变量的内容。我怎样才能让它打印出变量内容?

4

5 回答 5

2

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

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

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

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

最后检查mysql_error()错误。可能是您在数据库中看到了一些旧的东西,而您的代码根本不起作用。

考虑使用PDO。与原生 mysql_* 接口相比,它支持占位符、更好的安全性和更好的调试。

于 2012-04-06T21:21:51.723 回答
2

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

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

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

您还应该利用表架构定义的默认列值,因此您最终不会传入具有默认值的大量变量列表,例如,如果您将 aDEFAULT 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

于 2012-04-06T21:38:42.153 回答
0

我想不要在 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);
于 2012-04-06T21:16:50.137 回答
0

将插入语句更改为:

$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的值是否正确分配。

于 2012-04-06T21:17:35.973 回答
0

而不是使用\'$first_name\'替换它,\"$first_name\"其他变量也一样。

于 2012-04-06T21:24:55.070 回答