嗨我正在尝试将一个站点从mysql转换为mysqli,我遇到了以下错误,有人可以看看他们,看看我失踪了什么
警告:mysqli_query()期望参数1为mysqli,给定
为null警告:mysqli_fetch_array()期望参数1为mysqli_result,给定为null
继承人
部分的代码 if(! function_exists(getMemberType) )
{
function getMemberType($userid)
{
$result = mysqli_query($con,"select memtype from user where user_id = '$userid' ");
if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$response = $line[0];
}
return $response;
}
}
这是我的数据库文件
<?php
$con = mysqli_connect("localhost","datausername","password","databasename");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
答案 0 :(得分:4)
首先,您需要在函数名称周围使用引号(在function_exists
调用中),并且还需要声明$ con对象 - 作为函数中的全局(如下所示)或传入函数的参数(这意味着您需要编辑函数调用的所有出现以包含引用)
if( !function_exists( 'getMemberType' ) ) {
function getMemberType( $userid ){
global $con;
$result = mysqli_query( $con, "select memtype from user where user_id = '$userid' ");
if ( $line = mysqli_fetch_array( $result,MYSQLI_ASSOC ) ) {
$response = $line[0];
}
return $response;
}
}
答案 1 :(得分:0)
你应该把mysqli对象传递给函数:
if(! function_exists(getMemberType) )
{
function getMemberType($con, $userid)
{
$result = mysqli_query($con,"select memtype from user where user_id = '$userid' ");
if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$response = $line[0];
}
return $response;
}
}
答案 2 :(得分:0)
您没有处理来自mysqli_query
的调用中的错误,但必须抛出一个错误,因为$result
为空。您没有检查此结果,除了成功案例之外,您是否正确处理以下if:
if ($line = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
$response = $line[0];
}
return $response;
如果线路返回错误怎么办?无论如何我们返回$ response,默默地忽略至少一个错误条件。
如果您处理查询错误,您将更好地了解问题所在。但是如果你提高了代码的防御性,那么你可能希望得到更好的运气来让你的重构得到解决 - 当你确切知道它们的起源而不是每次跟踪代码时,你会有更好的时间找到错误。
希望有所帮助!
PS:不要忘记清理数据库输入!我不会依赖来电者自己这样做。准备好的语句,支持我的mysqli但不是旧的mysql,完全解决了这个问题。