【发布时间】:2014-11-15 15:49:54
【问题描述】:
我一直在尝试将以下mysql连接函数迁移到PDO:
function validate_email_input($email)
{
$dbc = @mysql_connect('localhost', 'userName', '******');
mysql_select_db('users', $dbc);
$query = "SELECT email FROM user_list WHERE email='$email'";
if ($result = mysql_query($query, $dbc))
{
$row = mysql_fetch_array($result);
if ($row['email'] == $email)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
echo '<p class="error">Could not retrieve he data because:<br />' . mysql_error($dbc) . '.</p>
<p>The query being run was: ' . $query . '</p>';
}
}
这很好用。但是当我尝试使用以下 PDO 函数来获得相同的结果时出现错误:
function validate_email_input($email)
{
// Step 1: Establish a connection
$db = new PDO("mysql:host=localhost;dbname=users", "userName", "******");
// Step 2: Construct a query
$query = "SELECT * FROM user_list WHERE email = '$email'";
// Step 3: Send the query
$result = $db->query($query);
// Step 4: Iterate over the results
if ($result)
{
$row = $result->fetch(PDO::FETCH_ASSOC);
if ($row['email'] == $email)
{
return TRUE;
}
else
{
return FALSE;
}
}
// Step 5: Free used resources
$result->closeCursor();
$db = null;
}
是的——我确实用 try-catch 尝试了上述功能,但这不会影响任何事情。我仍然收到错误: 致命错误:未捕获异常 'PDOException' 并带有消息 'SQLSTATE[HY000] [1049] 未知数据库 'users''
我正在使用 Bitnami RubyStack (v. 1.9.3-25) 中包含的 apache2 模块,它使用 PHP 版本 5.4.3 已经检查过 php.ini 文件并且所有 PDO 扩展名都未注释。 请帮忙!谢谢
【问题讨论】:
-
pdo 函数及其所有 cmets 均基于 sitePoint 文章。我是 PDO 的初学者。
-
好吧,您的查询不安全..如果您没有清理/转义电子邮件,以防您直接从客户那里获取...请改用准备好的语句
-
谢谢。我知道这不是最佳实践,但输入 ($email) 在发送到此函数之前会在主登录脚本中进行检查。我将把它移到这个函数中,但首先我需要 PDO 来识别数据库确实存在。