2

変数でリソース ID を取得しないようにするには、MySQL フェッチを使用する必要があることはわかっていますが、その方法を教えていただけないでしょうか。いくつかのチュートリアルから、ループを使用していることがわかりますが、1 つの文字列を選択して変数に入れたいだけです。ここに私が持っているコードがあります:

$img = mysql_query('SELECT pname FROM photos WHERE pphotoid=21');
echo $img;

私は基本的に、現在表示$imgされている文字列ではなく、データベースに文字列を含めたいと考えています。Resource id #3また、私が書いたものは SQL インジェクションになりやすいのでしょうか?

MySQLを学ぶので、どんな助けも素晴らしいでしょう!

4

3 に答える 3

1
$handle = mysql_query('SELECT pname FROM photos WHERE pphotoid=21');
$row = mysql_fetch_row($handle);
echo $img[0];

http://pl1.php.net/mysql_fetch_row

このコードはあなたのために働くでしょう。

SQL インジェクションを防ぐには、mysql_escape_string() などのエスケープ関数を使用する必要があります。また、入力内容を確認して有効にする必要があります。

ここであなたはもっと学びます

PHPでSQLインジェクションを防ぐにはどうすればよいですか?

また、mysql_* は PHP 5.5.0 で非推奨になり、将来的に削除されるため、PDO を使用することをお勧めします。

これは、PDOを使用してdbに接続することを学ぶためのチュートリアルです

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

PDO のコード (db に接続していると仮定) は次のようになります。 $id = intval(21); //このコードは無意味ですが、たとえば $_GET を介して 21 を取得すると、整数にキャストされ、インジェクションが防止されます

$stmt = $db->prepare("SELECT pname FROM photos WHERE pphotoid=?");
$stmt->execute(array($id));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo $row['pname'];
于 2013-04-18T16:52:02.450 に答える
1

私は次のことが好きです:

接続.php:

//All the $*_db variables are pulled from a file kept outside of the document root directory but referenced here to connect to the database
include('/path/to/file/not/in/docroot/connection_info.php');

$DBi = mysqli_connect($hostname_db, $username_db, $password_db, $database_db);
if($mysqli->connect_error) {
    //Do something for errors here...
};

file.php

include('connection.php');

$q_myQuery = "SELECT `pname` FROM `photos` WHERE `pphotoid` = 21";
$rsmyQuery = mysqli_query($DBi, $q_myQuery) or die(mysqli_error($DBi));
$row_rsmyQuery = mysqli_fetch_assoc($rsmyQuery);

$img = $row_rsmyQuery['pname'];

これは、廃止されたmysqli*関数ではなく、関数を使用しています。mysql*詳細はこちら: http://us3.php.net/manual/en/mysqlinfo.api.choosing.php

于 2014-07-05T15:48:26.327 に答える