我还是PHP和MYSQL的新手,当我运行prepare语句向数据库插入一些数据时,它返回false,但是我可以看到数据库中的新行,有谁知道为什么?我感谢任何帮助。我花了几个小时来计算,但没有运气。它只发生在INSERT语句中。它 这是我的代码
function cleanQuery($prepareState,$Arrs)
{
global $dbcon;
$refArr=array();
$res=$dbcon->prepare($prepareState);
$ref= new ReflectionClass('mysqli_stmt');
$method=$ref->getMethod("bind_param");
foreach($Arrs as $key => &$value)
{$refArr[] = &$value;
}
$method->invokeArgs($res,$refArr);
$res->execute();
$result=$res->get_result();
return $result;
}
这是准备声明的功能
CREATE TABLE BbUsers(
u_userid INTEGER PRIMARY KEY AUTO_INCREMENT ,
u_username CHAR(60) UNIQUE ,
u_passhash CHAR(100) ,
u_emailaddr CHAR(255) UNIQUE ,
u_created TIMESTAMP ,
u_lastlogin TIMESTAMP ,
u_validate CHAR(40),
INDEX (u_username , u_emailaddr)
);
我试图从$ res和$ dbcon获取错误信息,它返回0。 这里的数据库看起来像
public String toString(){
String stringVal = "[";
if(root != null){
stringVal+=getChildNoteString(root);
}
return stringVal+"]";
}
private String getChildNodeString(Node n){
String nodeStringVal = n+",";
if(n.getLeft()!=null){
nodeStringVal += ","+ getChildNodeString(n.getLeft());
}
if(n.getRight()!=null){
nodeStringVal += ","+ getChildNodeString(n.getRight());
}
}
我错过的任何其他事项>?
答案 0 :(得分:0)
请参阅documentation:
<强> mysqli_stmt :: get_result 强>
返回成功SELECT查询的结果集,或其他DML查询或失败时返回FALSE。 mysqli_errno()函数可用于区分两种类型的故障。
因此$res->get_result()
仅适用于您对select
的期望。
要检查准备好的语句是否正确执行,您可以直接使用execute的返回参数:
<强> mysqli_stmt ::执行强>
成功时返回TRUE,失败时返回FALSE。
您应该使用两个不同的函数,一个用于select
- 返回结果集的语句(顺便说一句,您必须fetch()
),否则进一步查询将无法工作,读取documentation to execute()
)中的注释,以及返回true
或false
的其他语句的注释。
你显然必须用if ($result2) {
替换if ($result) {
,但我认为这只是一个错字。