2017-07-17 58 views
-1

连接文件是如下这mysqli的查询就mysqli_connect

$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作为连接

+0

如果只有一个网站记录了这个... http://php.net/manual/en/book.mysqli.php – David

+0

你是什么意思的至极查询?我建议你使用MySQLi的准备好的语句函数而不是'mysqli_query();' – Jer

回答

0

如果没有明确给出连接,mysql函数将隐式使用最后一次连接。请注意,您可以传递连接,甚至可以传递旧功能,因为您可以read here。这种行为令人困惑且容易出错,所幸他们在mysqli函数中更加明确。

虽然我不确定这是主要原因。这可能与mysqli也有一个对象语法的事实有关,并且这个语法包含另一个语法。过程版本中的$con变量和目标版本中的对象实例都具有相同的目的:告诉函数/方法使用哪个连接。其实,the doc says对于mysqli_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

+0

你的意思是,如果我们给第一个查询连接,那么就不需要再提供第二个mysqli_query – LOKESH

+0

不可以。参数列表是基于实现,无论您使用哪种顺序的功能。我已经扩展了我的答案,但核心是:并不是所有的函数在mysql和mysqli之间都是完全一样的,所以你应该检查链接文档以确切地看到你需要传递哪些参数。 – GolezTrol