如何获取选择查询工作sqli

时间:2015-03-19 12:21:35

标签: php mysqli

我想用php中的sqli在我的users表上执行select查询。 出于安全原因(sql注入)我想使用参数来做。 我还想将结果存储在php变量中。

这是我的代码:

正确填写$conn变量。

$login = $_POST['username'];

//Check if username is available
/*Line44*/ $stmt = $conn->prepare("SELECT login FROM users WHERE login = ?");
/*Line45*/ $stmt->bind_param('s', $login);
           $result = $stmt->execute();

if ($result->num_rows > 0) 
{
    echo "This username is in use.";
}
else
{    
    //Add account to database
    $stmt = $conn->prepare("INSERT INTO users (login, password, email, gender) VALUES (?, ?, ?, ?)");
    $stmt->bind_param('ssss', $login, $md5pass, $email, $gender);
    $stmt->execute();
    $stmt->close();
    echo "<font color=\"#254117;\">Your account is succesfully geregistered! <br />U can now login!</font>";
}

我收到此错误:

  

警告:mysqli :: prepare()[mysqli.prepare]:无法获取mysqli   第44行的C:\ xampp \ htdocs \ cammerta \ registreer.php

     

致命错误:在非对象中调用成员函数bind_param()   第45行的C:\ xampp \ htdocs \ cammerta \ registreer.php

我希望有人能提供解决方案并向我解释我做错了什么。 提前谢谢!

2 个答案:

答案 0 :(得分:0)

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$stmt->execute();

1.请在phpmyadmin或任何程序中运行查询

2.也许你没有设置变量。 $ login,$ md5pass,$ email,$ gender

答案 1 :(得分:0)

$ stmt = $ conn-&gt; prepare语句可能返回false。请使用给定的代码来获取查询错误。

if ($stmt = $conn->prepare('your query')) {
    $stmt->bind_param(...);

}
else {
    printf("Error=: %s\n", $conn->error);
}