php连接mysql

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的本地网站里,打开网站

![](\img\pdo connect.png)

预处理语句及绑定参数

预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

预处理语句的工作原理如下:

  1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 “?“ 标记 。例如:

    INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。

  3. 执行:最后,将应用绑定的值传递给参数(”?” 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

相比于直接执行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;

  转载请注明: Liloong3t's Blog php连接mysql

 上一篇
ctf常见加密 ctf常见加密
[toc] CTF中常见的加密1.凯撒密码通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。只需简单地统计字频就可以破译 经典的凯撒加密算法是移动3位 2.base6
2020-10-01
下一篇 
常见漏洞原理 常见漏洞原理
[toc] 常见web漏洞SQL注入SQL注入是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令de web攻击方式。 由于WEB开发人员几乎不可能对所有输入进行检测,所以SQL注
2020-09-29
  目录