了解PHP分配

时间:2014-03-04 08:20:14

标签: php mysql sql if-statement mysqli

我有一些问题试图掌握目前可能在我之上的某些代码行背后的想法,因为我很确定他们与OOP有关(我不太了解我的情况,因为我是刚刚开始讨论OOP背后的概念)当我读到一本PHP书时,这就出现了。代码如下。

$mysqli = new mysqli('example','example','example');
if(!$mysqli){
    die("Could not connect".mysql_error());
}
else {
    echo("Connection established");
}

if($mysqli->query("CREATE DATABASE querycreation1")===TRUE){
    echo"<p>Database Querycreation1 created</p>";
}
else {
    echo "Error creating database".mysql_error();
}

我理解前几行(并了解最佳实践的输入),但我遇到问题的部分是在下一组if-else语句之后。 第二个if语句检查数据库的创建是否为真,但有人可以解释数据库创建的确切时间吗?我需要创建一个,然后再检查它吗?任何意见都将不胜感激。

3 个答案:

答案 0 :(得分:2)

在PHP中的比较中,首先评估所有表达式。这意味着在

if($mysqli->query("CREATE DATABASE querycreation1")===TRUE)

PHP将首先在$ mysql-object上运行query()函数。该函数返回一个结果。在成功创建数据库的情况下,它将返回TRUE(http://nl1.php.net/mysqli_query)。然后将调用此函数(TRUE)的结果与TRUE进行比较。

或许你可以看到更详细的信息:

$databaseCreated = $mysqli->query("CREATE DATABASE querycreation1");

if($databaseCreated ===TRUE){
    echo"<p>Database Querycreation1 created</p>";
}
else {
    echo "Error creating database".mysql_error();
}

答案 1 :(得分:1)

$mysqli->query()执行查询,在本例中为CREATE查询。如果查询成功执行,则函数返回TRUE,如果发生错误,则返回FALSE。因此,数据库是在评估===比较的第一个参数时准确创建的。

通常,在php脚本中创建数据库不会经常发生,通常仅在“安装”脚本中用于设置一些php驱动的软件(例如讨论板/论坛)。除此之外,您还需要通过数据库管理系统(如phpMyAdmin)或之后删除的脚本创建数据库。然后在实际的站点脚本中,您只假设数据库存在,因为您通常也不会删除它们。

您可以通过将查询的返回值分配给变量并对其进行检查来以不同方式编写它:

$success = $mysqli->query("CREATE DATABASE querycreation1");
if ($success===TRUE){
    // ...

但这完全是一个偏好问题。

此外,由于die语句,其他第一个并不是绝对必要的。您可以通过多种方式简化(或者说,修改)该部分:

// The "just no else" version
if (!$mysqli)
    die("Could not connect".mysql_error());
echo("Connection established");

// The one-liner version
if (!$mysqli) die("Could not connect".mysql_error());
echo("Connection established");

// The short-circuit version
$mysqli OR die("Could not connect".mysql_error());
echo("Connection established");

// same using the symbolic version of OR
$mysqli || die("Could not connect".mysql_error());
echo("Connection established");

// you can also include that in the first call
$mysqli = new mysqli('example','example','example') OR die("Could not connect".mysql_error());
echo("Connection established");

最后三个示例的工作基于php以短路方式处理逻辑运算符的事实,即,如果第一部分是TRUE,那么整个OR无论第二个参数是什么,表达式都是TRUE,因此php甚至不会对它进行评估。但是,如果第一部分是FALSE,则表达式的值取决于第二个参数,因此会对其进行求值。

答案 2 :(得分:0)

第一点: 您正在创建一个mysqli类的实例,其中包含连接,查询,管理数据库的方法。您需要传递一些类,这些参数由class'es构造函数用于连接数据库。

此实例称为对象,现在此对象具有连接,可以使用类中的方法来查询,管理该数据库。

为了更好地理解:http://www.php.net/manual/en/language.oop5.php