0

我是 PHP 新手-> 第一次开发人员。我正在开发我的 Web 应用程序,它几乎完成了;尽管如此,我的大部分 sql 都是通过使用直接 mysql 请求的代码直接完成的。这是我接近它的方式:

classes_db.php 中,我声明了数据库设置并创建了用于打开和关闭数据库连接的方法。我在常规页面上声明了这些对象:

class classes_db {

    public $dbserver = 'server;
    public $dbusername = 'user';
    public $dbpassword = 'pass';
    public $dbname = 'db';

    function openDb() {
        $dbhandle = mysql_connect($this->dbserver, $this->dbusername, $this->dbpassword);
        if (!$dbhandle) {
            die('Could not connect: ' . mysql_error());
        }
        $selected = mysql_select_db($this->dbname, $dbhandle)
                or die("Could not select the database");

        return $dbhandle;
    }


    function closeDb($con) {
        mysql_close($con);
    }
}

在我的常规页面上,我这样做:

<?php
require 'classes_db.php';
session_start();

//create instance of the DB class
$db = new classes_db();

//get dbhandle
$dbhandle = $db->openDb();

//process query
$result = mysql_query("update user set username = '" . $usernameFromForm . "' where iduser= " . $_SESSION['user']->iduser);

//close the connection
if (isset($dbhandle)) {
    $db->closeDb($dbhandle);
}

?>

我的问题是:如何正确地做到这一点并使其 OO 和安全?我知道我需要合并准备好的查询->如何以最好的方式做到这一点?请提供一些代码

4

2 回答 2

1

停止使用 mysql_* ,改用 mysqli和PDO

PHP PDO 与普通 mysql_connect

mysql_* 函数正在变旧。很长一段时间以来,mysql_* 一直与其他常见的 SQL 数据库编程接口不一致。它不支持现代 SQL 数据库概念,例如准备好的语句、存储的过程、事务等。它使用 mysql_real_escape_string 转义参数并连接到 SQL 字符串的方法容易出错且过时。mysql_* 的另一个问题是它最近缺乏开发人员的关注,它没有得到维护......这可能意味着安全漏洞等问题没有得到修复,或者它可能完全停止与新版本的 MySQL 一起工作. 最近 PHP 社区也认为适合开始软弃用 mysql_* 这意味着您将开始看到最终从语言中完全删除 mysql_* 函数的缓慢过程(Don'

PDO 有一个更好的界面,你最终会变得更有效率,并编写更安全、更干净的代码。PDO 还为不同的 SQL 数据库供应商提供不同的驱动程序,这将允许您轻松使用其他供应商,而无需重新学习不同的界面。(尽管您可能必须学习稍微不同的 SQL)。不是将转义字符串连接到 SQL 中,而是在 PDO 中绑定参数,这是一种更简单、更简洁的保护查询的方法。当使用稍微不同的参数多次调用相同的 SQL 查询时,绑定参数还可以提高性能。PDO 也有多种错误处理方法。我在 mysql_* 代码中看到的最大问题是它缺乏一致的处理,或者根本没有处理!当 PDO 处于异常模式时,

现在在 PHP 安装中默认启用 PDO,但是您需要两个扩展才能使用 PDO:PDO 和您要使用的数据库的驱动程序,如 pdo_mysql。安装 MySQL 驱动程序就像在大多数发行版中安装 php-mysql 包一样简单。

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

于 2012-11-03T17:00:13.973 回答
0

我强烈推荐 RedBeanPHP。它是一个非常可靠的 MySQL 数据库库,它抽象出数据库交互的所有连接、查询、清理、准备、使用 PDO 等(考虑到您是 PHP 开发的新手,这对您来说非常有用)。

在这里查看:http ://redbeanphp.com/

建立连接是多么容易的一个例子:

require('rb.php');
R::setup('mysql:host=localhost; dbname=mydatabase','user','password');

设置 RedBeanPHP:http: //redbeanphp.com/manual/setup

当创建一个类来处理你的数据库对象时,你会想要使用一个接口和/或一个抽象类来设置某些对象行为规则(想想 CRUD ......)。

您需要做的就是将该数据库连接包含在一个通用文件中,将其包含在您的所有 PHP 脚本中,然后一切就绪。

于 2012-11-03T16:57:38.447 回答