如何将MySQL选择查询值转换为PHP变量?

时间:2013-04-18 16:49:43

标签: php mysql sql

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

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

我基本上希望$img包含数据库中的字符串而不是它当前显示的Resource id #3。我写的也容易出现SQL注入?

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

3 个答案:

答案 0 :(得分:2)

$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"];

答案 1 :(得分: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()之类的转义函数 您还应该检查您的输入是什么并使其有效

在这里您将了解更多

How can I prevent SQL injection in PHP?

使用PDO也更好,因为从PHP 5.5.0开始不推荐使用mysql_ *,并且将来会删除它。

这是学习使用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'];

答案 2 :(得分:1)

我喜欢以下内容:

connection.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