使用PHP检查PSQL数据库中是否已存在数据

时间:2018-07-15 19:43:50

标签: php postgresql psql

我有一个注册网页,该网页使用PHP连接到postgres数据库。

数据库如下:

 id | first_name | last_name |       email        |  uid  | pwd  
----+------------+-----------+--------------------+-------+------
  9 | David      | Jones     | davidjones@one.com | admin | 111
 10 | John       | Stone     | js@bbb.com         | 5     | 222
 11 | a          | Stone     | js@ccc.com         | admin | 333
 12 | David      | f         | js@ccc.com         | admin | 4444

我想检查在网页中输入uid(用户名)时是否检查uid以查看是否已经使用过。 我正在创建的代码如下(所有其他检查空字段的电子邮件有效,输入工作仅用户名检查不起作用):

<?php 

if (isset($_POST['submit']))

   include_once 'dbh.inc.php';

   $first = ($_POST[first]);
   $last = ($_POST[last]);
   $email = ($_POST[email]);
   $uid = ($_POST[uid]);
   $pwd = ($_POST[pwd]);

  // valadate the sign up form
    // check for empty fields
if (empty($first) || empty($last) || empty($email) || empty($uid) || empty($pwd)) {
     header("Location: ../signup.php?signup=empty");
     exit();
    }else{
    //check if email is valid   
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
               header("Location: ../signup.php?signup=invalidemail");
               exit();
           } else { 
           // check to see if user name is already been used
               $sql = "SELECT * FROM users WHERE user_uid=$uid";
               $result = pg_query($sql);
               $resultCheck = pg_numrows($result);

               if ($resultCheck > 0){
                   header("Location: ../signup.php?signup=usertaken");
                   exit();
               } else {    
   // insert data into users table
   $query="INSERT INTO users (first_name,Last_name,email,uid,pwd) VALUES ('$_POST[first]','$_POST[last]','$_POST[email]','$_POST[uid]','$_POST[pwd]')";
   $result = pg_query($query);
   // go back to the sign up page
   header("Location: ../signup.php");
    exit();
  }     
 }    
}
   ?>

有人可以帮助我吗? 非常感谢 戴夫

1 个答案:

答案 0 :(得分:1)

您需要在$ uid周围使用单引号,因为它是字符串。 所以这应该工作:

$sql = "SELECT * FROM users WHERE user_uid='$uid'";

您也可以尝试使用预备语句,然后不必在字符串中使用单引号,而可以将数据类型作为参数(通常为stringinteger)传递。它还可以保护您免受SQL注入的攻击,这是针对您的代码容易受到攻击的网站的常见攻击类型。

在PHP中,使用预准备语句的流行方式是PDO:http://php.net/manual/en/pdostatement.bindvalue.php