0

以下のエラーが表示されます。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'testing order by id'

メインページはこちら..

echo "<div ><a href='secondpage.php?title=".urlencode($row['title'])."'>".wordwrap($row['title'], 35, "<br />\n", true)."</a></div>";

エラーが表示される 2 番目のページを次に示します。アドレスバーはhttp://localhost/secondpage.php?title=more+testing

 <?php
   $mydb = new mysqli('localhost', 'root', '', 'test');
   $sql = "SELECT * FROM test where urlencode(title) =".$_GET['title']" order by id ";
     $result = $mydb->query($sql);
  if (!$result) {
  echo $mydb->error;
 }


 ?> 
 <div>
 <?php
 while( $row = $result->fetch_assoc() ){

 echo $row['firstname'];
 }
 $mydb->close ();
 ?>
 </div>
4

5 に答える 5

1

クエリでエンコードされた文字列をデコードするために使用urldecodeします。

$title = urldecode($_GET['title']);
$sql = "SELECT * FROM test where title = '$title' order by id";

テーブルに名前の付いた列があると仮定していtitleますtest。PHPurlencodeurlencode.

アップデート:

SQL インジェクションのポイントを指摘してくれた @GeorgeLund に感謝します。あなたの質問に答えている間、私が見逃した重要なトピック。ご覧ください: https://www.owasp.org/index.php/SQL_Injection

少なくとも、コードを次のように更新してください。

$title = urldecode($_GET['title']);
$title = mysqli_real_escape_string($title); // Addition
$sql = "SELECT * FROM test where title = '$title' order by id";
于 2013-08-09T04:27:06.863 に答える
1
$sql = "SELECT * FROM test where urlencode(title) ='".$_GET['title']."' order by id ";
于 2013-08-09T04:30:01.360 に答える
0

のようにしてみてください

$sql = "SELECT * FROM test WHERE urlencode(title) = ".$_GET['title']." ORDER BY id ";

.リードの構文を見逃していました。

于 2013-08-09T04:19:56.767 に答える
0

私の知る限り、SQLには機能がurlencodeありません。なぜurlencode列名が必要なのですか?

また、最後のページから受け取ったエンコードされたタイトル文字列を保存するには、エンコードされたタイトルをデコードする必要があります

これがあなたが意図したことだと思います。

$sql = "SELECT * FROM test WHERE title = ".urldecode($_GET['title'])." order by id ";
于 2013-08-09T04:25:59.100 に答える
-1

urldecode を使用してこのコードを試してください

$sql = "SELECT * FROM test where title =".urldecode($_GET['title'])" order by id ";
于 2013-08-09T04:24:22.157 に答える