PHP: MySQL Select 查询与字符串操作

PHP: MySQL Select Query vs String Operation

我有一个数据库和一个包含大约 100,000 个键/值对记录的字符串,我想创建一个函数来查找值。

考虑到性能(页面加载时间)和崩溃安全性,使用字符串还是数据库更好?这是我的两个代码示例:

1.

echo find("Mohammad");

function find($value){
    $sql = mysql_query("SELECT * FROM `table` WHERE `name`='$value' LIMIT 1");
    $count = mysql_num_rows($sql);
    if($count > 0){
        $row = mysql_fetch_array($sql);
        return $row["family"];
    } else {
        return 'NULL';
    }
}

2.

$string = "Ali:Golam,Mohammad:Offer,Reza:Now,Saber:Yes";

echo find($string,"Mohammad");

function find($string,$value){
    $array = explode(",",$string);
    foreach($array as $into) {
        $new = explode(":",$into);
        if($new[0] == $value) {
            return $new[1];
            break;
        }
    }
}

数据库确实是个好主意。

  1. 数据库很快,可能没有PHP中的基本字符串操作快,但是如果数据很多,数据库可能会更快。一个基本的 select 查询(在我当前的默认桌面硬件上)大约需要 15 毫秒,缓存不到 1 毫秒,如果索引正确,这几乎与 table 中的名称数量无关。所以您的网站将永远是快速的。

  2. 数据库不会导致 Whosebug 或内存不足错误并使您的站点崩溃(这在很大程度上取决于您的 PHP-设置和硬件)

  3. 数据库更灵活,假设您想在创建第一个数据集后添加/删除/编辑名称。使用 "INSERT INTO"、"DELETE FROM" 和 "UPDATE" 修改数据非常简单,比在代码中某处编辑一个包含大约 100.000 个条目的字符串要好。

你的代码

  1. 你肯定需要使用 MySQLi or PDO 来代替,代码可能是这样的:
$mysqli = new mysqli("host", "username", "password", "dbname");
$stmt = $mysqli->prepare(
    'SELECT string FROM table WHERE name = ? LIMIT 1'
);
$stmt->bind_param("s", $value);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($string);
$stmt->fetch();
$stmt->close();

这使用MySQLi and Prepared Statements (for security), instead of the depracated MySQL extension (in PHP 5.5)