0

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、select でブール値が指定されています

//define variable to check the number of rows where the sql query is true to find out if the username or password are already in use
$EmailCheck = mysql_query("SELECT `Email` FROM `Customer` WHERE `Email` = '$RegCusEmail'");
$UserCheck = mysql_query("SELECT `Username` FROM `Customer` WHERE `Username` = '$RegCusUser'");

//checks if emails in use
if (mysql_num_rows($EmailCheck) != 0)
{
  echo '<p id="error">The Email address you have entered is already in use.<p>';
}

//checks if username is in use
elseif (mysql_num_rows($UserCheck) != 0)
{
  echo '<p id="error">The username you have entered is already in use.<p>';
}

上記のコードは、登録者の電子メールとユーザー名をデータベースで検索することになっています。それらが既に存在する場合は、ユーザーに別のものを使用するように指示しますが、それを使用するとこのエラーが発生しますか?

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in (file directory) on line 56 
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in (file directory) on line 62
4

4 に答える 4

1

1) PDO を使用します。

//connection
$host =     "localhost";
$user =     "someuser";
$pass =     "somepass";
$database = "db_name";

$db = new PDO("mysql:host=$host;dbname=$database", $user, $pass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")) or die("Connection error!");

$query = 'SELECT Customer.Email FROM Customer WHERE Customer.Email = :RegCusEmail';
$params = array(':RegCusEmail' => $RegCusEmail);

$result = db_query($query,$params);

if($result == false)
{
  //do stuff..
}


function db_query($q,$p = array())
{
    global $db;

    if($stmt = $db->prepare($query))
    {

        if(count($p) > 0)
        {
            foreach ($p as $key => $value) {
                $stmt->bindParam($key,$value);
            }
        }

        $stmt->execute();
        $resulSet = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if(count($resulSet) > 0)
        {
            return true; // exists
        }
        else
        {
            return false; // does not exist
        }

    }

}

2) メールアドレスとメールサーバーの検証

function isValidEmail ($email)
{
    if ($isemail=filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        if(list($email,$domain) = explode('@',$email))
        {
            if(!getmxrr ($domain,$mxhosts)) 
            { 
                return FALSE; 
            }
            else 
            { 
                return TRUE; 
            }
        }
        else
        {
            return FALSE;
        }
    }
    else
    { 
    return FALSE; 
    } 

}
于 2013-01-18T15:56:35.543 に答える
0

データベースへの接続を忘れているか、データベースの詳細が正しくない可能性があります。クエリ エラーが発生した場合は、die (mysql_error())次のようなエラー処理メソッドとしてクエリを終了してデバッグすることをお勧めします。

mysql_query("SELECT Email FROM Customer WHERE Email = '$RegCusEmail'") or die (mysql_error());

適切なエラーを取得します。

于 2013-01-18T15:45:05.387 に答える
0

5.2以降を使用している場合は、次のように簡単です

 function checkEmail( $EmailCheck ){
    return filter_var( $EmailCheck, FILTER_VALIDATE_EMAIL );
  }

明らかにエラー処理を追加します..

于 2013-01-18T15:47:07.370 に答える
0

代わりに、結果に対して次のチェックを行います。

if ( ! is_resource( $EmailCheck ) || mysql_num_rows( $EmailCheck ) != 0 )

ただし、確認mysql_error()してください。クエリにエラーがある可能性があります。

于 2013-01-18T15:49:24.000 に答える