我想使用预准备语句在mysqli中插入和更新数据,
以下是我的database
课程,
class database extends mysqli
{
...
# insert and update data
public function query_stmt($sql,$types = null,$params = null)
{
# create a prepared statement
$stmt = parent::prepare($sql);
if($stmt)
{
# bind parameters dynamically for markers
if($types&&$params)
{
$bind_names[] = $types;
for ($i=0; $i<count($params);$i++)
{
$bind_name = 'bind' . $i;
$$bind_name = $params[$i];
$bind_names[] = &$$bind_name;
}
$return = call_user_func_array(array($stmt,'bind_param'),$bind_names);
}
# execute query
$result = $stmt->execute();
if($result) return 'success!';
else return 'failed!';
# close statement
$stmt->close();
}
else
{
return self::get_error();
}
}
# display error
public function get_error()
{
if($this->errno || $this->error)
{
return sprintf("Error (%d): %s",$this->errno,$this->error);
}
}
public function __destruct()
{
parent::close();
//echo "Destructor Called";
}
}
当我有这样的正确查询时,它可以正常工作,
$sql = "
INSERT root_countries_cities_towns (
tcc_names,
cny_numberic,
tcc_created
)VALUES(
?,
?,
NOW()
)";
$mysqli->query_stmt($sql, 'ss',array('UK','004'));
但是我希望它在我有不正确的查询时返回一些内容,例如,
$sql = "
INSERT root_countries_cities_townx (
tcc_names,
cny_numberic,
tcc_created
)VALUES(
?,
?,
NOW()
)";
root_countries_cities_townx
的表格不存在。所以我希望query_stmt
的方法将这种类型的错误消息返回给我的浏览器。但我的方法不行!为什么呢?
我试图测试它以返回一些默认词,无论它是否正常,但我的浏览器上什么都没有出现,
# execute query
$result = $stmt->execute();
if($result) return 'success!';
else return 'failed!';
我应该在代码中添加或更改哪些内容,以便在可以正常时返回正消息,并在不正常时返回否定消息?
感谢。
答案 0 :(得分:0)
您将返回错误消息,而不是回显它们。您必须修改数据库类以使用echo
而不是返回,或执行
$ret_text = $mysqli->query_stmt(...);
echo $ret_text;