PHP / MySQL:为什么我的查询不起作用?

时间:2015-06-03 22:00:27

标签: php mysql pdo mysqli cloud9-ide

我在cloud9上进行了一个Web项目,我可以使用Mysqli命令插入我在MySQL的数据库中。但是,当我尝试从数据库中选择数据时,我的查询不起作用:( echo $ result不打印任何内容)。有什么想法吗?

使用PDO命令可能更好吗?

    <?php

        //connect
        $servername = getenv('IP');
        $username = getenv('C9_USER');
        $password = "";
        $database = "myproject";
        $dbport = 3306;

        // Create connection
        $bdd = new mysqli($servername, $username, $password, $database, $dbport);


        // Check connection
        if ($bdd->connect_error) {
            die("Connection failed: " . $bdd->connect_error);
        } 
        echo "Connected successfully (".$bdd->host_info.")";
        $pseudonyme = $_POST['pseudo'];
        $mot_de_passe = $_POST['mdp'];
        $confirm_mdp = $_POST['confirm_mdp'];
        $email = $_POST['email'];

        if($mot_de_passe == $confirm_mdp)
        {

            $mot_de_passe = crypt($mdp);
            $pseudonyme = htmlspecialchars($Pseudonyme);

            //verifying is user mail is already in base

            $reqVerif = $bdd->prepare('SELECT ID_utilisateur FROM utilisateurs WHERE Adresse_email = ?');
            $reqVerif->bind_param("sss",$email);
            $reqVerif->execute();
            $result = $reqVerif->fetch();

            //user already exist in DB
            if($result)
            {
    ?>
              <div class="nouveau_membre" >
                <p>You already have a account...</p>
              </div>
    <?php
            }
            else
            {
            //in case of new user
             $req = $bdd->prepare('INSERT INTO utilisateurs(Pseudonyme, Mot_de_passe, Adresse_email, Date_inscription) VALUES(?, ?, ?, CURDATE())');
             $req->bind_param("sss", $pseudonyme, $mot_de_passe, $email);
             $req->execute();
             ?>

              <div class="nouveau_membre" >
                  <p>New USER !</p>
              </div>
              <?php
            }
        }
              ?>

2 个答案:

答案 0 :(得分:1)

您只绑定了电子邮件参数,您不需要3&#34; s&#34;

$reqVerif->bind_param("sss",$email);

尝试:

$reqVerif->bind_param("s",$email);

答案 1 :(得分:1)

mysqli准备好的语句应该有效。只需改变几行,

;

您只在此处选择一个字符串,因此只列出一次:

break1: ;

对于您的选择,最简单的方法是绑定结果,如下所示:

$reqVerif = $bdd->prepare('SELECT ID_utilisateur FROM utilisateurs WHERE Adresse_email = ?');

然后你可以像这样回应你的结果:

$reqVerif->bind_param("s",$email);
$reqVerif->execute();

然后关闭你的对象:

$reqVerif->bind_result($ID_utilisateur);
$reqVerif->fetch();

(当然你可以像上面那样做;我只是将其简化为元素)

编辑:如果您想检查是否有任何行(它出现的是什么行),您需要在执行此行后存储结果:

echo $ID_utilisateur;

然后你可以这样做:

$reqVerif->close();

然后检查它:

$reqVerif->store_result();

然后你可以在关闭对象之前释放结果:

$num=$reqVerif->num_rows;