2

我知道我需要使用 MySQL fetch 来防止在我的变量中获取资源 ID,但我想知道你是否可以帮助我如何做到这一点。我从几个教程中看到他们使用循环,但我只想选择一个字符串到一个变量中。这是我的代码:

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

我基本上想$img在数据库中包含Resource id #3当前显示的字符串。我写的东西也容易被 SQL 注入吗?

学习 MySQL,所以任何帮助都会很棒!

4

3 回答 3

3
$img=mysql_fetch_assoc(mysql_query('SELECT pname FROM photos WHERE pphotoid=21'));
      echo $img["pname"];

会更好

$img=mysqli_fetch_assoc(mysqli_query($link,'SELECT pname FROM photos WHERE pphotoid=21'));
echo $img["pname"];
于 2013-04-18T16:53:10.103 回答
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 注入?

最好使用 PDO,因为 mysql_* 自 PHP 5.5.0 起已被弃用,并且将来会被删除。

这是学习使用 PDO 连接到 db 的教程

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

您在 PDO 中的代码(假设您已连接到 db)将如下所示: $id = intval(21); //这里的代码是没有意义的,但是如果你得到 21 例如通过 $_GET 它会将它转换为整数并防止注入

$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...
};

文件.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 回答