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

Checking to see if data is already in a PSQL database Using PHP

我有一个注册网页,它使用 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();
  }     
 }    
}
   ?>

谁能帮帮我? 非常感谢 戴夫

$uid 需要用单引号括起来,因为它是字符串。 所以这应该有效:

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

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

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