【问题标题】:which mysqli query need mysqli_connect哪个 mysqli 查询需要 mysqli_connect
【发布时间】:2017-12-21 22:24:50
【问题描述】:

连接文件如下

$host="localhost";
$username="root";
$password="123";
$database = "order";
$con = mysqli_connect($host, $username, $password, $database);
$sel_db=mysqli_select_db($con,$database) or die("Cannot Select Database");

在我包含上述连接文件的每个文件中

我的 mysql 旧代码是这样的

mysql_query("select * from order_detail");

mysqli的新查询如下

mysqli_query($con,"select * from order_detail");

以上查询需要 $con 进行连接

mysql_fetch_array($var) 变成mysqli_fetch_array($var) 它不需要$con

mysql_real_escape_string($var) 变为 mysql_real_escape_string($con,$var);

所以我的问题是哪个查询需要 $con 作为连接

【问题讨论】:

  • 如果有网站记录这一点就好了……php.net/manual/en/book.mysqli.php
  • 什么是查询?我建议你使用 MySQLi 的预处理语句函数而不是 mysqli_query();

标签: php mysql mysqli


【解决方案1】:

如果没有明确给出连接,mysql 函数会隐式使用最后建立的连接。请注意,您已经可以传递连接,甚至可以传递到旧函数 read here。这种行为令人困惑且容易出错,所以幸运的是,他们在mysqli 函数中更明确地说明了这一点。

我不确定这是主要原因。这可能与 mysqli 也具有对象语法这一事实有关,并且一种语法包装了另一种语法。过程版本中的$con 变量和目标版本中的对象实例都具有相同的目的:告诉函数/方法使用哪个连接。实际上,the doc saysmysqli_query 的连接参数是一个 mysqli 对象实例,所以 mysqli_query 可能只是像这样实现为一个包装函数,以便更容易地将代码从 mysql 转换为 mysqli:

function mysqli_query($link, $query, $resultmode = MYSQLI_STORE_RESULT) {
  return $link->query($query, $resultmode);
}

如果您不理解我在最后一段中所说的任何内容,请不要担心,这并不重要。 ;)

无论如何,mysql_query 对连接执行查询,mysql_fetch_array 从查询中获取值结果$var 你的通行证已经包含了它需要的所有信息。它此时不需要连接,因此无需将其作为参数传递。顺便说一句,没有mysqli_fetch_array。相反,您应该使用mysqli_stmt_fetch,这同样适用:它不需要连接,而是需要一个语句对象(mysqli_stmt),它代表查询结果。

许多mysqli函数的参数与其前辈相同或相似,但可能存在差异。因此,对于您使用的每个功能,我都会检查the official documentation

另外,我会使用 IDE 或编辑器,通过提供内置代码洞察力来帮助您处理函数语法。 Netbeans for PHP 是一个相当精致的,可以免费使用,但如果你能花钱的话,还有更好的(比如 PHPStorm)。

PS:如果你使用prepared statements,你可以完全摆脱mysql_real_escape_string

【讨论】:

  • 你的意思是如果我们给第一个查询连接,那么不需要给第二个mysqli_query
  • 没有。无论您使用函数的顺序如何,参数列表都是根据实现固定的。我已经扩展了我的答案,但核心是:并非所有功能在 mysql 和 mysqli 之间都完全相同,因此您应该查看链接文档以确切了解您需要传递哪些参数。
猜你喜欢
  • 2013-12-08
  • 2013-03-20
  • 2010-12-28
  • 2013-05-02
  • 1970-01-01
  • 2012-03-11
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多