【问题标题】:PHP/MySQL : why my query doesn't work? [closed]PHP/MySQL:为什么我的查询不起作用? [关闭]
【发布时间】:2015-06-03 22:00:26
【问题描述】:

我在 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
            }
        }
              ?>

【问题讨论】:

  • 你绝对可以使用mysqli。见下方答案

标签: php mysql pdo mysqli cloud9-ide


【解决方案1】:

你只绑定 email 参数,不需要 3 个“s”

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

尝试:

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

【讨论】:

    【解决方案2】:

    mysqli 准备好的语句应该可以工作。只需更改几行,

    $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;
    

    然后检查一下:

    if ($num > 0) {
    
        echo $ID_utilisateur;
    }
    

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

    $reqVerif->free_result;
    $reqVerif->close();
    

    【讨论】:

    • 感谢这个非常完整的评论:)
    • 很高兴我能帮上忙 :) 如果它解决了您的问题,请使用复选框将其标记为已解决。
    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多