在mysqli中找不到我的语法错误

时间:2014-10-09 09:38:01

标签: php sql mysqli prepared-statement

我使用下面的代码在我的查询中绑定参数以将用户添加到我的数据库

if($stmt = $dbh->prepare('INSERT INTO tblusers(UserName,FirstName,LastName,Email,Password,RegistratieIP) VALUES( :username, :firstname, :lastname, :email, :password, :ip)')){
    $stmt->bind_param(':username', $inUsername);
    $stmt->bind_param(':firstname', $inFirstName);
    $stmt->bind_param(':lastname', $inLastName);
    $stmt->bind_param(':email', $inEmail);
    $stmt->bind_param(':password', $inPassword);
    $stmt->bind_param(':ip', $ip);

    $stmt->execute();
}else{
    echo $dbh->error;
}

我收到的错误是:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便使用':username,:firstname,:lastname,:email,:password,:ip)'在第1a行

我一直在查看php手册,根据该手册,我的语法应该是正确的。

2 个答案:

答案 0 :(得分:2)

尝试这样绑定:

if($stmt = $dbh->prepare('INSERT INTO tblusers(UserName,FirstName,LastName,Email,Password,RegistratieIP) VALUES(?, ?, ?, ?, ?, ?)')){
    $stmt->bind_param('ssssss', $inUsername, $inFirstName, $inLastName, $inEmail, $inPassword, $ip);
    $stmt->execute();
}else{
    echo $dbh->error;
}

查看文档:{​​{3}}

答案 1 :(得分:1)

PHP mysqli::prepare page似乎并不同意你的观点。它使用?作为参数标记,bind的第一个参数是参数类型而不是名称。

请尝试使用表单:

if ($stmt = $dbh->prepare('INSERT INTO tbl(col1,col2) values (?,?)')) {
    $stmt->bind_param('ss', $colval1, $colval2);
    $stmt->execute();
}