2

我正在将很多文件从 mysql 更改为 mysqli。我正在使用它来做到这一点:https ://wikis.oracle.com/display/mysql/Converting+to+MySQLi

我的连接文件(为了简单起见,我删除了我认为不必要的代码,例如错误处理)会产生我不确定如何修复的错误。原始代码:

$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass");

mysql_select_db("$db", $conn);

新代码:

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass")); 

((bool)mysqli_query( $conn, "USE $db"));

上面的代码只是我连接到每个文件中使用的数据库文件

include_once("includes/connnect.php");

连接到数据库和表的前面的代码必须与下面的代码一起使用,因为我有很多类似下面的查询,并且更改 connect.php 文件比更改许多文件更容易:

$con1 = mysqli_query($GLOBALS["___mysqli_ston"], "SELECT * FROM table1 WHERE id='$id'"); 

编辑 - 更新为包含我在复制和粘贴时错过的分号。

编辑 2 - 包括来自转换工具的错误/警告消息

14  [Line 14] Please check your code for parse errors, we failed to parse " ". Conversion will be incomplete!".
14  [Line 14] Cannot analyze server parameter to extract host, socket and port! Conversion cannot be performed automatically. You must manually check the result of the conversion.
16  [Line 16] mysql_select_db(string database_name [...]) is emulated using mysqli_query() and USE database_name. This is a possible SQL injection security bug as no tests are performed what value database_name has. Check your script!

第 14 行在哪里

$conn=mysql_connect ("$localhost", "$dbusername", "$dbpass"); 

第 16 行是

mysql_select_db("$db", $conn);

编辑 - 下面的工作答案。转换工具适用于我所有其他文件。只需在我的连接文件中更改它连接到数据库的方式

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass", "$db", "3306")) or die ('Cannot connect to the database because: ' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));

3306 是端口。要查找端口,请使用以下命令:

$port = ini_get("mysql.default_port");
echo "the port ". $port;
4

2 回答 2

3

14 [第 14 行] 请检查您的代码是否存在解析错误,我们无法解析“”。转换将不完整!”。

此错误是由调用中的空格引起(mysql_connect()。将其替换$conn=mysql_connect("$localhost", "$dbusername", "$dbpass");为 MySQLConverterTool 删除此警告输出。

剩下的两个错误是您应该通过实际查看mysql_connect()和之间的差异来处理的问题mysqli_connect()mysql_connect()的第一个参数 ,$server可以像这样格式化,hostname:portmysqli_connect()你只传递hostname给它的第一个参数并port作为可选的第五个参数传递。此外,mysqli 会让您在mysqli_connect()调用中指定数据库,而不是使用类似于mysql_select_db().

我建议,如果您需要,您可以使用转换器工具将您的所有源代码从 mysql 转换为 mysqli,除了这些带有警告的行。只有你知道"$localhost"进来的是什么格式:如果它可能包含端口信息,你必须将端口信息分开。您可能应该设置要使用的数据库,mysqli_connect()而不是使用转换器的自动USE $db填充程序。这正是转换器试图告诉您的内容:-)。

请注意,我不会说:

我的连接文件(为了简单起见,我删除了我认为不必要的代码,例如错误处理)会产生我不确定如何修复的错误。

以上表明转换器生成的 PHP 代码本身会在运行时引发 PHP 警告和错误(不是转换器抱怨您的原始代码或通知您实际上需要进行一些手动转换,正如我上面讨论的那样) . 这就是为什么我们要寻找错误,例如您纠正的曾经丢失的分号。

于 2013-06-30T03:32:21.477 回答
0

您忘记了分号:

$conn=($GLOBALS["___mysqli_ston"] = mysqli_connect("$localhost",  "$dbusername",  "$dbpass")); //<--- 
于 2013-06-30T02:36:34.433 回答