所以我有一个PDO和MySQL脚本,用于根据用户的用户名或屏幕名称检索结果,在这种情况下为e
。
首先,我在文件开头有一个用于连接数据库的函数。 (它出现在functions.php
文件中,required
出现在每页的开头,因此全球化)。这个功能没有任何问题(据我所知)。
function SQLConnect () {
// Database connection variables
$host = "localhost";
$dbname = "dropbox";
$user = "root";
$password = "ethan17458";
// Connect to the database
try {
//put $connect in global scale of document
global $connect;
// attempt to connect to database
$connect = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
// Sets error mode
$connect->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {
// Retrieves error message if connection fails
echo $e->getMessage();
}
}
此功能使用PDO连接到包含用户信息的数据库。
接下来是检索用户数据的脚本
// Test user in database
$test = "e";
try {
//confirms running of "try" block
echo "tried";
//database information
$host = "localhost";
$dbname = "dropbox";
$user = "root";
$password = "ethan17458";
//Prepare statement from connection function
// username_raw is "e"
//username should be e1671797c52e15f763380b45e841ec32 (md5)
$statement = $connect->prepare("SELECT `username` FROM `users` WHERE `username_raw` = ':name'");
//create placeholder for prepared statement
$statement->bindParam(":name", $test);
//make the statement fetch in an associative array
$statement->setFetchMode(PDO::FETCH_ASSOC);
//execute the prepared statement
$statement->execute();
//set $get_result to the fetched statement
$get_result = $statement->fetch();
//attempt to display the data fetched in $get_result
echo "<br />";
echo "<pre>";
//Outputs 1 for some reason
// **not working**
echo print_r($get_result);
echo "</pre>";
echo "<br />";
} catch (PDOException $e) {
//confirm running of "catch" block
echo "caught";
// echo error message
echo $e->getMessage();
}
当我运行此脚本时,我得到了这个输出:
tried
1
在此输出中,tried
确认&#34;尝试&#34;声明已被处理,1
是我开始遇到问题的地方。
如果脚本按照我的意愿运行,脚本将从数据库中检索数据e1671797c52e15f763380b45e841ec32
,因为username
为username_raw
的列为e
,正如PDO准备声明中所述。
理想的输出应该是
tried
e1671797c52e15f763380b45e841ec32
我做错了什么?
答案 0 :(得分:0)
fetch()返回false,它不会向屏幕打印任何内容。这是错误的,因为您没有得到任何结果,因为您在查询中围绕参数放置单引号,PDO会为您处理。只需删除周围的引号:名称。