我知道我需要使用MySQL fetch来防止在我的变量中获取资源ID,但我想知道你是否可以帮我解决这个问题。我从几个教程中看到他们使用循环,但我只想在变量中选择一个字符串。这是我的代码:
$img = mysql_query('SELECT pname FROM photos WHERE pphotoid=21');
echo $img;
我基本上希望$img
包含数据库中的字符串而不是它当前显示的Resource id #3
。我写的也容易出现SQL注入?
学习MySQL所以任何帮助都会很棒!
答案 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