除了一个故障外,我还有以下代码行正确执行。它会将变量名称打印到数据库中。
我在我的一篇文章中使用了这段代码:
$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
请注意,将打印变量名称,而不是变量的内容。如何打印出变量内容?
答案 0 :(得分:2)
对于一个你有引用问题。你似乎有双引号然后转义单引号。如果您的字符串是双引号,请不要转义单引号。
似乎$first_name
的价值应该有效。这是确切的代码吗?因为如果你有整个事物的单引号,它会创建你正在描述的输出。
所有其他列都不是变量,所以很难知道你要做什么。如果你不打算使用它们,为什么要引用它们呢?
在mysql_query
来电中,请勿再引用$sql
。
最后检查mysql_error()
是否有错误。可能是您在数据库中看到旧的东西,而您的代码根本无法正常工作。
考虑使用PDO。与原生mysql_ *接口相比,它支持占位符,更好的安全性和更好的调试。
答案 1 :(得分:2)
请注意,变量名称,而不是变量的内容是打印的
这是因为你没有将变量传递给insert语句,而是传递未定义的(?)常量; 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');";
数据库将自动为您填充item1,item2等列为0。
正如cambraca所提到的,如果您将变量直接传递到您的查询中,则会冒SQL injection的风险。你应该阅读如何prepare你的查询,这也将迫使你使用mysqli(vs过时的mysql)api。或者甚至更好,请阅读PDO。
答案 2 :(得分: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);
答案 3 :(得分: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
是否已正确分配值。
答案 4 :(得分:0)
而不是使用\'$first_name\'
将其替换为\"$first_name\"
,而其他变量也是如此。