我以前做过这个,但对 mysqli 和准备好的语句还很陌生(我相信你可以从这个问题中看到)。
我哪里出错了?
这是我的连接函数(“Connect”类的一部分)
public function site_db()
{
// Connect to MySQL
$link = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB);
// Check for Errors
if(mysqli_connect_errno())
{
//echo mysqli_connect_error(); //shouldnt show client specific error information.
die('Error connecting to mysql database please report.');
}
}
这是导致错误的函数:
public function exists ($what, $who)
{
$query = "SELECT * FROM users WHERE ? = ?";
// Get instance of statement
$stmt = $mysqli->stmt_init();
// Prepare query
if($stmt->prepare($query))
{
// Bind Parameters
$stmt->bind_param("ss", $what, $who);
// Execute statement
$stmt->execute();
// Bind result variables
$stmt->bind_result($result);
// Fetch Value
$stmt->fetch();
// catch num_rows result as variable
$username_result = $result->num_rows;
// Close Statement
$stmt->close();
}
if ($username_result != 0)
{
return true;
echo 'true';
}
else
{
return false;
echo 'false';
}
}
我得到的错误:
PHP fatal error :在第 X 行的 somefile.php 中的非对象上调用成员函数 stmt_init()
它指的是这一行:
$stmt = $mysqli->stmt_init();
我在这里犯了一个愚蠢的错误吗?我怎么不能这么称呼?
编辑//
注意:我没有说得很清楚,但这两个函数位于不同的类中。
最佳答案
public function site_db()
{
// Connect to MySQL
$mysqli = mysqli_connect(SITE_HOST, SITE_ID, SITE_PW, SITE_DB);
// Check for Errors
if(mysqli_connect_errno())
{
//echo mysqli_connect_error(); //shouldnt show client specific error information.
die('Error connecting to mysql database please report.');
}
return $mysqli;
}
public function exists (Mysqli $mysqli, $what, $who)
{
$query = "SELECT * FROM users WHERE ? = ?";
// Get instance of statement
$stmt = $mysqli->stmt_init();
// Prepare query
if($stmt->prepare($query))
{
// Bind Parameters
$stmt->bind_param("ss", $what, $who);
// Execute statement
$stmt->execute();
// Bind result variables
$stmt->bind_result($result);
// Fetch Value
$stmt->fetch();
// catch num_rows result as variable
$username_result = $result->num_rows;
// Close Statement
$stmt->close();
}
if ($username_result != 0)
{
return true;
echo 'true';
}
else
{
return false;
echo 'false';
}
}
使用方法:
实例化具有 site_db() 方法的第一个类
$db = new Class();
然后实例化具有exist()方法的第二个类
$query = new Class();
然后简单
$query->exist($db->site_db(), $what, $who );
关于php - 准备好的语句不允许我调用 $mysqli->stmt_init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6658722/