从MySQLi转换为

时间:2018-02-08 11:09:54

标签: php mysqli pdo

我有一个在数据库上运行查询时使用的通用脚本,它包含错误检查等。希望这是一个足够可读的脚本。

// Set some variables if necessary
$var = "example";

// Write sql statement with ? as placeholders for any values
$sql = "sqlstatementhere";

// Prepare the SQL statement using the database connection parameter
if($stmt = $dbconEDB->prepare($sql))
{
    // Bind any necessary variables 
    if($stmt->bind_param('s', $var))
    {
        $result = $stmt->execute();

        // If the statement ran successfully
        if($result)
        {
            $result = $stmt->get_result();

            if($result->num_rows >= 1)
            {
                while($row = $result->fetch_assoc())
                {
                    // If there are result get them here
                    // $var = $row['fieldname'];
                }
            }
            else // the statement returned 0 results
            {
                // Deal with the nothingness
            }
        }
        else // the sql didnt execute
        {
            // Somethings gone wrong here
        }
    }
    else // the binding was wrong
    {
        // Check your bindings
    }   
}
else // There was an error preparing the sql statement (its wrong)
{
    // the sql is wrong
}

我想用PDO制作同样的东西,但是,制作一个类会更有益吗?

1 个答案:

答案 0 :(得分:1)

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO:: PDO::FETCH_ASSOC);

$stmt = $pdo->prepare($sql);
$stmt->execute([$var]);
$rowset = $stmt->fetchAll();

如果启用了例外,则可以简化代码并在每个函数后跳过检查错误。如果发生错误,您就会知道它!你可能想要捕捉异常。

不需要bind_param()废话。只需将一组参数值传递给execute()。

不要担心检查是否有任何行。如果没有结果,fetchAll()将返回一个空数组。除非你有一个不太适合内存的巨大结果集,否则只需使用fetchAll()

我不知道为什么有人会使用mysqli。 PDO更容易。