准备好的查询不适用于PHP

时间:2014-09-26 21:02:45

标签: php mysql mysqli

我试图使用准备好的查询,但这段代码不起作用,它只是停留在第一次使用prepare()时。评论拳头if()什么都不做,现在它停留在第二个。没有连接问题/没有错误,只是卡住了。

如果我只使用mysqli_query()完成所有这些操作,那么一切都很有效。

function addUser($id){
/*
  if ($stmt = $this->mysqli->prepare("SELECT * FROM Users WHERE ID = ?")){

    if (!($stmt->bind_param("s", $id))){
      return false;
    }

    if ($stmt->execute()) {
      if ($stmt->num_rows!=0){
        return false;
      }

    }else{
      return false;
    }

  }else{
    return false;
  }*/

  if ($stmt = $this->mysqli->prepare("INSERT INTO Users VALUES (?, '')")) {

    if (!$stmt->bind_param("s", $id)) {
      return false;
    }

    if (!$stmt->execute()) {
      return false;
    }

    return true;
  }

  return false;

}

关于调试,如果我改变这样的代码

function addUser($id){
  echo "1";
  if ($stmt = $this->mysqli->prepare("SELECT * FROM Users WHERE ID = ?")){
    echo "2";
    if (!($stmt->bind_param("s", $id))){
      return false;
    } ...

  }else{
    echo "3";
  } ...

我只会看到" 1"在页面上。

开始上课:

class db{
    private $mysqli;

    function __construct($ip, $login, $password, $database){
      $this->mysqli = new mysqli($ip, $login, $password, $database) or die("Problem with DB connection!"); 
      $this->mysqli->set_charset("utf8");
    }

1 个答案:

答案 0 :(得分:0)

你永远不会execute()所以不会发生任何事情,因此不会引起任何错误。

以下是我的写作方式:

function addUser($id){
    if ($this->mysqli->connect_errno) {
        die('Connect Error: ' . $this->mysqli->connect_errno);
    }
    if ($stmt = $this->mysqli->prepare("INSERT INTO Users VALUES (?, '')")) {
        $stmt->bind_param("s", $id);//did you mean i  for type int ?
        $stmt->execute();//dont forget this!!
    }else{
        die('Connect Error: ' . $this->mysqli->connect_errno);
    }

    return ($stmt->rowCount() > 0)? true : false;

}