2011-09-20 39 views
0

mysql_real_querymysql_query有什么区别?我做了一个快速的谷歌搜索,但找不到显示两者之间的区别的任何链接。mysql_real_query vs mysql_query

+0

mysql_real_query是否存在? –

+0

@Jon no ...它不是 – genesis

+1

@Jon:不知道PHP,但它存在于libmysqlclient中。 –

回答

11

mysql_real_query()在PHP中不存在。但是,mysqli_real_query()存在。

根据官方的MySQL手册(该C API):http://dev.mysql.com/doc/refman/5.0/en/mysql-real-query.html

的mysql_query()不能被用于包含二进制数据的语句;您必须改用mysql_real_query()。 (二进制数据可能包含“\ 0”字符,其中mysql_query()将解释为语句字符串的结尾。)另外,mysql_real_query()比mysql_query()更快,因为它不会在语句字符串上调用strlen 。

关于你的第二个问题,插入多条记录的最好的方法是创建具有多个值的INSERT查询:

INSERT INTO table (col1, col2) VALUES (1, 1), (2,2), (3,3) 

等。 这将在1个操作中插入所有新行,因此它应该比运行3个查询更快,每行一个。 PS:你应该考虑使用支持预备语句的扩展,比如MySQLi(注意i)或更好的PDO。 不仅准备好的语句更安全(如果您正确使用它们,它们对于SQL注入100%安全),还可以让您执行类似于本页中示例中所示的操作:http://fr2.php.net/manual/en/pdo.prepare.php(可以使用INSERT当然也包括查询)。啊,PDO也是面向对象的,这很好:)

+0

我编辑它,建议使用准备好的语句,它可以用来插入许多行并且非常高效(如果将所有查询放入事务中,它甚至更快)。而PDO对于其他许多事情来说更好。 – Qualcuno

3

的区别仅仅是在C API。一个采用C风格的字符串,另一个采用缓冲区和长度属性以允许NUL字节。 PHP内部使用mysql_real_query

+0

不应该最后一句是“PHP内部使用libmysql的'mysql_real_query'的C版本”? – Pacerier

0
Insert into table1 (a,b,c) VALUES (1,2,3),(1,2,4),(3,4,5) 

这将在table1中添加三个新行,它们应该具有列a,b和c(可能还有其他具有默认值或可以为null的列)。

https://dev.mysql.com/doc/refman/5.5/en/insert.html

+0

有人可以告诉我为什么我被评价了吗?在原来的帖子里有两个问题,其中我回答了第二个问题。 –