从 mysql 过渡到 MySQLi 或 PDO

Posted

技术标签:

【中文标题】从 mysql 过渡到 MySQLi 或 PDO【英文标题】:Making the transition from mysql_ to MySQLi or PDO 【发布时间】:2014-01-31 14:40:11 【问题描述】:

我一直在这里和谷歌搜索如何从一开始就将我的所有 mysql 脚本更改为 MYSQLI 或 PDO。问题是由于某种原因我无法理解,因为我没有经验并且无法进行简单的会话工作。这是我将开始做的事情,因为我想学习新的 MYSQLi:

我选择了注册表(我不会在公共场合使用它,我的网站仅供朋友使用,没有更多人我选择成为会员并注册)

<?php
/* instantiate our class, and select our database automatically */
$sql = mysqli('localhost','user','password','database');

/*
let's assume we've just received a form submission.
so we'll receive the information, and we'll escape it
this step is not necessary, but why not.
*/
$name  = $_POST['name'];
$age   = $_POST['age'];
$email = $_POST['email'];

/* build the query, we'll use an insert this time */
$query = $sql->prepare("INSERT INTO `tablename` VALUES ('?','?','?');");

/*
bind your parameters to your query
in our case, string integer string
*/
$query->bind_param("sis",$name,$age,$email);
/* execute the query, nice and simple */
$query->execute();
?>

这对我来说很容易理解,现在我找不到一个很好的用户登录示例,我找到的所有示例都来自专家开发人员,他们大多创建了如此复杂的脚本,我什至不需要它。已经安装了很多现成的例子,感觉不太好。

我每天 1 周 12 小时一直在等待、寻找和搜索的是:

我希望用户只需登录,然后脚本就会有这样的简单内容:

页面开始

HELLO <PHP ECHO USERNAME> <PHP ECHO AGE> <PHP ECHO ANYTHING FROM DB> 
THANKS

<?php
ELSE
IF USER IS NOT LOGGED IN
REDIRECT TO THE PAGE NOTMEMBER.PHP
?>

页尾

为什么?因为这是我在 MYSQL 中编写代码时使用的简单方法,并且所有站点结构都是基于这样的。

示例或演示站点也会有所帮助。

非常感谢

【问题讨论】:

VALUES ('?','?','?') VALUES (?, ?, ?) 感谢这位朋友 【参考方案1】:

我会建议你学习 PDO(PHP Data Objects) 而不是 MySQLi 因为 PDO 支持 12 种不同的数据库 驱动程序而 MySQLi 只支持MySQL 数据库。 要了解 PDOMySQLi 之间的区别,请访问-PDO vs. MySQLi: Which Should You Use? 要了解 PDO,请访问这个非常好的教程- 1.Why you Should be using PHP's PDO for Database Access 2.PHP Database Access: Are You Doing It Correctly?

【讨论】:

【参考方案2】:

您的表格也需要有一个密码列。

html 登录表单:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 <input type="text" name="email" />
 <input type="text" name="password" />
 <input type="submit" name="submit" value="Log in" />
</form>

在 PHP 文件中捕获它:

if(isset($_POST['submit'])) 
 $email = $_POST['email'];
 $pass = $_POST['password'];
 if($email != '' && $pass != '')  //both not empty, proceed
  $checkUser = $sql->prepare("SELECT * FROM `users` WHERE `email` = ? AND `pass` = ?");
  $checkUser->bind_param('ss', $email, $pass);
  $checkUser->execute();
  if($checkUser->num_rows() > 0)  //if user exists with given email and pass
   $_SESSION['logged-in'] = 1;
  
 

确保将session_start(); 放在每个 PHP 文件的顶部。然后你只需使用

if($_SESSION['logged-in'] == 1) 
 echo 'this is for logged in users';
 else 
 header("Location: notMember.php");
 exit();

【讨论】:

感谢 M8 有没有办法使用旧式 mysql 布局,例如:

以上是关于从 mysql 过渡到 MySQLi 或 PDO的主要内容,如果未能解决你的问题,请参考以下文章

Zend db 适配器 mysqli 或 PDO_MYSQL

从 mysql_query 转换为准备好的语句 (mysqli/PDO)?必要的?

PDO PDO_MYSQL MYSQLI MYSQL 的区别

PDO 不会将数据从 mysql 返回到 jQuery AJAX [关闭]

如果 PDO 和 mysqli 不可用,使用 mysql_* 函数是不是安全?

php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例