-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

最初のことは、次のように一重引用符がないことです。

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

サーバーに送信する前に、クエリ全体をエコーし​​てみてください。また、SQL サーバーからのエラー情報を使用して、これを解決します。たとえば、mysqli を使用します。

echo "Error message: %s\n" . mysqli_error();
于 2013-04-24T09:31:21.043 に答える
1

質問に直接答えるlidには、文字列リテラルであるため、値を一重引用符で囲む必要があります。

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

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-04-24T08:48:27.490 に答える
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 に答える