-1
$sql = ("INSERT INTO `Lcode` (lid, sid)
VALUES (".$a.", ".$b.")"
);

上面的lid=varchar 和 $a=vib(在这种情况下) 上面的sid=int 和 $b=3(同样在这种情况下)

但它似乎没有将其插入数据库?

我检查了我与服务器的连接,没问题。

我可以用这样的代码更新:

$sql = ("INSERT INTO Lcode SET lid='".$b."'");

和一个类似的更新。

我真的希望你能帮我解决这个问题。

更多信息

$a = strtolower ( $resa['lid'] );
$b = strtolower ( $resb );

$resa['lid'] = 我从 mysql 服务器获得的一个变量:: 当尝试回显 $a 时它会正确返回

$resb 是我使用 $_GET :: 对 url 进行的调用,它也可以正确返回。

我在解决这个问题时遇到了一些麻烦,需要你的帮助......

感谢你的帮助

4

4 回答 4

1

要直接回答您的问题,您需要lid用单引号将值括起来,因为它是字符串文字。

$a = strtolower($resa['lid']);
$b = strtolower($resb);
$sql = "INSERT INTO Lcode (lid, sid) VALUES ('$a', $b)";

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-24T08:48:27.490 回答
1

首先是缺少单引号,像这样:

$sql = "INSERT INTO `tbl_name` (`field1`, `field2`) VALUES ('$a','$b')";

在将整个查询发送到服务器之前尝试回显整个查询。还可以使用来自 sql server 的错误信息来解决此问题,例如使用 mysqli:

echo "Error message: %s\n" . mysqli_error();
于 2013-04-24T09:31:21.043 回答
0

您忘记引用您的字符串值。这个:

$sql = ("INSERT INTO `Lcode` (lid, sid)
VALUES (".$a.", ".$b.")"
);

应该:

$sql = ("INSERT INTO `Lcode` (lid, sid)
VALUES ('".$a."', '".$b."')"
);

要找出这类问题,在执行之前打印出整个查询非常有用,它应该为您提供有关可能的语法错误的线索。

于 2013-04-24T08:48:54.383 回答
0

像这样尝试更容易,

INSERT INTO `table_name` SET `lid` = $somevalue, `sid` = $somevalue2
于 2013-04-24T09:05:31.273 回答