如果有很多方法可以实现相同的结果,我想知道哪种方法是初始化mysql连接的最有效方法。
注意:最近我还在PHP文档中发现mysql_connect现在是DISCOURAGED,我的所有代码当前都使用mysql_connect。是否有足够的理由转换?
我要做的是:
那么这个database.php应该做什么,以便最有效率。
1. $con = mysql_connect("etc"...)
mysql_select_db("databse")
//从这里我可以包含这个文件并开始进行查询。 - 工作,但我不确定它是否是最佳方式。
2. //database.php
$mysqli = new mysqli('localhost', 'user', 'pwd', 'database');
// in other files
$mysqli->query("SELECT ...")
提前谢谢
答案 0 :(得分:6)
我刚刚在我的代码中将MySQL扩展的所有功能都改为PDO。
为了最灵活,您应该使用如下常规连接创建“database.php”:
<?php
$pdo = new PDO('mysql:host=example.com;dbname=database;charset=UTF-8',
'username',
'password');
然后在其他页面中,使用require()
包含如下文件:
<?php
require('database.php');
// Example with 'query'
$queriedSQL = $pdo->query('SELECT * FROM table');
// Example with 'prepare'
$preparedSQL = $pdo->prepare('SELECT * FROM other_table WHERE id = ?');
$preparedSQL->setFetchMode(PDO::FETCH_ASSOC);
while($result = $queriedSQL->fetch(PDO::FETCH_ASSOC)) {
$preparedSQL->execute(array($result['id']));
$preparedSQLResult = $preparedSQL->fetch();
// Process code here
}
另一方面,您可以将“index.php”作为核心,然后处理URL或$_GET[]
以包含相应的文件(如所有CMS系统,Wordpress等)。
这样,当某些数据(主机,用户名,密码和/或数据库名称)发生变化时,您可以避免更改代码量。
关于持久连接,PHP允许它,但是你可以在here中找到它们的缺点。
答案 1 :(得分:3)
您应该做的第一件事是创建一个mysql.config.php文件。
<?php
define('MYSQL_HOST','');
define('MYSQL_USER','');
define('MYSQL_PASSWORD','');
define('MYSQL_DATABASE','');
?>
您应该做的第二件事是创建一个mysql.class.php文件,该文件处理所有数据库连接细节(模拟此行为)。只需添加新功能即可扩展numRows功能等功能。
<?php
require_once 'mysql.config.php';
class MySQL {
private $query;
private $result;
public function __construct($host = MYSQL_HOST, $user = MYSQL_USER, $password = MYSQL_PASSWORD, $database = MYSQL_DATABASE) {
if (!$con = mysql_connect($host,$user,$password)) {
throw new Exception('Error connecting to the server');
}
if (!mysql_select_db($database,$con)) {
throw new Exception('Error selecting database');
}
}
public function query($query) {
$this->query = $query;
if (!$this->result = mysql_query($query)) {
throw new Exception('Error performing query '.$query);
}
}
public function numRows() {
if ($this->result) return mysql_num_rows($this->result);
return false;
}
}
?>
您需要做的最后一件事是在您的应用中使用这些文件。
<?php
require_once 'mysql.class.php';
try {
$db = new MySQL();
$db->query('SELECT username FROM login WHERE username = "'.$USERNAME.'" LIMIT 1');
if ($db->numRows() == 1) print_json(array('user'=>true),true);
else print_json(array('user'=>false),true);
} catch(Exception $e) {
echo $e->getMessage();
exit();
}
?>
答案 2 :(得分:1)
由于网站数据库很重,我建议您使用PDO进行数据库连接。还使用事务进行多个查询,以减少PHP-MySQL流量。
详细信息:http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html
答案 3 :(得分:1)
关于PHP编程语言,MySQL是旧的数据库驱动程序,而MySQLi是改进的驱动程序。 MySQLi利用了MySQL 5的新功能。从php.net网站逐字解读:
如果你只是在寻找一个关系数据库,你需要看看MySQL,尽管有很多选择。
答案 4 :(得分:0)
RE:“我应该使用持久连接”
没有。如果您的数据库“很重”,持久连接将无法提供帮助 - 实际上,它们可能会妨碍PHP脚本在处理数据时长时间保持打开状态。持久连接只能加快连接到数据库的时间IN SOME CIRCUMSTANCES。您可以为每个脚本运行节省几毫秒,但除非您仔细阅读,否则您将失去更多运行清理功能以释放锁定或事务。因此,除非你有很多非常非常短的脚本得到简短的数据库连接,然后继续前进,或者数据库服务器距离网络服务器很远,所以不要在这一点上出汗。
PDO已在其他答案中提出,所以我已将它们标记为最适合您。