php连接MySQL
用mysqli以面向对象的方式连接mysql数据库
在本地网站建一个这样的index.php,就能连接到本地MySQL服务器了,以下代码纯手撸~ 可以自行输入服务器名,用户,密码
connect_error)
{
die("连接失败:".$sql->connect_error);
}
else
{
echo "";
// header('Location:cmd.php');
// exit;
$url = "cmd.php";
echo "";
}
}
else
{
?>
连接数据库
请输入服务器,用户名以及密码
访问页面
这里输入啥就可以登陆啥了,我这里以root用户登录localhost
连接成功!
我这里设计了一个可以提交mysql命令的页面(注入漏洞警告!)
提交以后,嘻嘻,这样就没法注入了吧
cmd.php的源码
query($cmd))
{
echo "命令执行成功,但我就不给你看结果,嘻嘻";
}
else{
echo "执行失败"."Error:".$sql->error;
}
}
else{
?>
输入SQL命令
输入SQL命令:
实际上,应该用session来继承从index页面获得的数据,这里我偷个懒,用session的实现留到以后再说
。。。
好的,三天过去了。我来接着水用cookie或session来实现的方法了
只要将上面的代码改造一点点,改成下面这样
//index.php
connect_error)
{
die("连接失败:".$sql->connect_error);
}
else
{
session_start();
//开启session
$lifetime=3600 * 24; //设置cookie生存周期为1天
setcookie(session_name(),session_id(),time() + $lifetime,"/");
//如果没有这行代码,服务器也会生成一个临时session
$_SESSION['servername']=$servername;
$_SESSION['username']=$username;
$_SESSION['passwd']=$password;
echo "";
// header('Location:cmd.php');
// exit;
$url = "cmd.php";
echo "";
}
}
else
{
?>
连接数据库
请输入服务器,用户名以及密码
//cmd.php
connect_error){
die("连接失败".$sql->connect_error);
}
if(!empty($_POST['cmd'])){
$cmd=$_POST['cmd'];
if($sql->query("$cmd")===TRUE)
{
echo "命令执行成功,但我就不给你看结果,嘻嘻";
}
else{
echo "执行失败"."Error:".$sql->error;
}
}
else{
?>
输入SQL命令
输入SQL命令:
上面代码开启了session,配置cookie保存session ID(手动设置了session生存周期为1天),用session保存了’servername’,’username’,’password’(一般来说最好不要保存这么多重要信息),并在index.php转到cmd.php时用session保证信息传递
运行结果
没有报错,所以利用session传递用户信息和连接数据库成功了。
用PDO连接mysql数据库
在Windows用pdo之前需要在php.ini里,将pdo拓展打开,具体方法是将# extension = php_pdo.dll这一行注释去掉(phpstudy已经做完了这一步),然后需要连接哪种数据库就再去掉哪种数据库的注释。PDO(php database object)最大的优点就是可以连接不止mysql这一种数据库,比较方便的地方是可以使用异常类来处理程序运行时出现的问题,像下面代码可以将执行部分放在try{}模块中,发生异常直接获得信息,不用像上面sqli一样每次都判断一下执行是否成功
<?php
$servername = "localhost";
$username = "root";
$password = "root";
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);//建立连接对象
echo "连接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
还是放到phpstudy的本地网站里,打开网站

预处理语句及绑定参数
预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。
预处理语句的工作原理如下:
预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?“ 标记 。例如:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
执行:最后,将应用绑定的值传递给参数(”?” 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
相比于直接执行SQL语句,预处理语句有两个主要优点:
预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
PDO 中的预处理语句
实例 (PDO 使用预处理语句)
<?php $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "myDBPDO"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // 设置 PDO 错误模式为异常 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 预处理 SQL 并绑定参数 $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (:firstname, :lastname, :email)"); $stmt->bindParam(':firstname', $firstname); $stmt->bindParam(':lastname', $lastname); $stmt->bindParam(':email', $email); // 插入多行数据 $firstname = "John"; $lastname = "Doe"; $email = "john@example.com"; $stmt->execute(); $firstname = "Mary"; $lastname = "Moe"; $email = "mary@example.com"; $stmt->execute(); $firstname = "Julie"; $lastname = "Dooley"; $email = "julie@example.com"; $stmt->execute(); echo "新记录插入成功"; } catch(PDOException $e) { echo "Error: " . $e->getMessage(); } $conn = null; ?>
关闭连接
连接在脚本执行完后会自动关闭。但也可以使用以下代码来关闭连接:
实例 (MySQLi - 面向对象)
$conn->close();
实例 (MySQLi - 面向过程)
mysqli_close($conn);
实例 (PDO)
$conn = null;