【发布时间】:2013-01-11 01:04:12
【问题描述】:
我在使用 MySQLI 代码生成寄存器时遇到问题。表/连接变量匹配,并且通过查询传递的正确变量填充了预期的字符串,当运行 query 或 prepare & execute 执行任何类型的查询时,我得到以下返回:
致命错误:在非对象上调用成员函数 query() /var/www/New/API/FormValidations.php 第 40 行
我的代码如下:
$Query = $STD->prepare("SELECT * FROM Users WHERE Username='$Username'");
$Query->execute();
$Number = $Query->num_rows;
if ($Number !== 0)
{
echo "Username Already In Use";
}
else
{
$Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES ('$Username', '$Password)");
$Insert_User->execute();
echo "Account Created!";
}
这是我的连接脚本:
$STD = new mysqli('localhost', 'root', 'xxxxx', 'SLMS');
$AccessCon = new mysqli('localhost', 'root', 'xxxxx', 'DBAccess');
if ($AccessCon->connect_error) {
die("Access Has Been Revoked. Please Contact Administration");
}
if ($STD->connect_error) {
die("Standard Access Has Been Revoked. Please Contact Administration");
}
还有我的用户 SQL 表:
CREATE TABLE IF NOT EXISTS `Users` (
`ID` int(255) NOT NULL AUTO_INCREMENT,
`Username` varchar(255) NOT NULL,
`Password` text NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
我已经尝试注释掉我所有的查询代码,并运行
$Query = $STD->query("SHOW TABLES");
$Results = $STD->fetch_array(MYSQLI_ASSOC);
这仍然在我的 $Query 变量上返回错误。
我还尝试修改我的代码以搜索数据库中已经存在的内容:
$Query = $STD->prepare("SELECT * FROM Users WHERE Username='Test'");
并试图附上我的$Username如下:
$Query = $STD->prepare("SELECT * FROM Users WHERE Username='{$Username}'");
这没有成功。我想知道是否有人可以阐明这种情况?
编辑:
注释掉整个脚本并运行:
$Query = $STD->query("SHOW TABLES");
$test = $Query->fetch_array(MYSQLI_ASSOC);
print_r($test);
返回一个结果。
更新:
我已将代码修改为:
$Query = $STD->prepare("SELECT * FROM Users WHERE Username=?");
$Query->bind_param("s", $Username);
$Query->execute();
最终更新:
致命错误:在非对象上调用成员函数 bind_param() 在 /var/www/New/Register.php 第 45 行
这是新的错误。
违规行:
$Insert_User = $STD->prepare("INSERT INTO Users ('Username', 'Password') VALUES (?, ?)");
$Insert_User->bind_param("ss", $Username, $Password);
$Insert_User->execute();
【问题讨论】:
-
什么是 dd 在您上次编辑中替换为 ss。
-
@ROYFinley 我已经做到了。问题仍然存在,但看起来一切正常