我正在尝试使用预准备语句设置数据库处理,但我有点卡住了。我没有得到任何错误消息,数据没有放入数据库。我有点害怕这只是一个愚蠢的错误,但如果你能帮助我,我会很感激。
我正在使用带有mysql数据库的php。
下面你可以看到创建一个人的功能。 getConnection()将打开数据库连接到变量$ link,如果没有错误则返回true。
public function createUser($userName, $password)
{
if($this->getConnection() === true) {
$stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)');
mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
$this->link->close();
}
如果你有一个想法,那么错了,我会非常高兴。我愿意接受吸烟。
提前致谢
/ Pyracell
答案 0 :(得分:2)
如果MySQL查询失败,MySQLi不会总是抛出错误,所以如果事情不能正常工作,你将不得不在每个步骤检查出错的地方。对于此mysqli_error()
和mysqli_stmt_error()
是您的朋友。
作为错误检查的一个过度杀伤的例子(出于调试目的,一旦你有工作,它可以缩减),如:
public function createUser($userName, $password)
{
if($this->getConnection() === true) {
$stmt = mysqli_prepare($this->link, 'INSERT INTO users (Username, Login, Password) VALUES (?, ?, ?)');
if ($stmt != FALSE) {
$bind = mysqli_stmt_bind_param($stmt, 'sss', $userName, $userName, $password);
if ($bind == FALSE) {
echo 'Bind failed: '.mysqli_stmt_error($stmt);
} else {
$exec = mysqli_stmt_execute($stmt);
if ($exec == FALSE) {
echo 'Execute failed: '.mysqli_stmt_error($stmt);
}
}
mysqli_stmt_close($stmt);
} else {
echo 'Prepare failed: '.mysqli_error($this->link);
}
} else {
echo 'Failed connecting to database: '.mysqli_connect_error();
}
$this->link->close();
}