从 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 数据库。 要了解 PDO 和 MySQLi 之间的区别,请访问-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 [关闭]