1

私のブログを安全にしようとし、準備されたステートメントを学びます。

変数を設定しましたが、データベースからすべてのエントリを取得しています。$ escapedGetは、印刷すると実際の変数になります。明らかに新人の間違いですが、答えが見つからないようです。

postlinkが$escapedであるデータを取得する必要があります。すべてのデータを取得するわけではありません。

    $escapedGet = mysql_real_escape_string($_GET['article']);

        // Create statement object
            $stmt = $con->stmt_init();

        // Create a prepared statement
        if($stmt->prepare("SELECT `title`, `description`, `keywords` FROM `post` WHERE `postlink` = ?")) {

         // Bind your variable to replace the ?
         $stmt->bind_param('i', $postlink);

         // Set your variable   
          $postlink = $escapedGet;

          // Execute query
           $stmt->execute();

           $stmt->bind_result($articleTitle, $articleDescription, $articleKeywords);

            while($stmt->fetch()) {
              echo $articleTitle, $articleDescription, $articleKeywords; 
             }

          // Close statement object
          $stmt->close();
        }

これを試してみました:echo $escapedGet; echo $_Get['artcile']

そして得た-some_otherそれは私がpostlinkとしてデータベースに保存したのと同じエントリです

idへのpostlinkをシャンドしようとしましたが、うまくいきました。しかし、なぜポストリンクタブではないのですか?

4

1 に答える 1

1

'i'モディファイアを使用してデータをバインドすると、整数としてバインドされます。最後のステートメントで文字列が0にキャストされることを意味します。

しかし、mysqlが型キャストを行うので、このクエリでは文字列がゼロになります。

SELECT title FROM post WHERE postlink = 0;

それを試してみてください-テキストの投稿リンクについては、すべてのレコードが返されます(および一連の警告)。

sしたがって、修飾子ではなく、修飾子を使用して文字列をバインドしますi

于 2013-03-20T11:07:43.300 に答える