0

私はいくつかの myqli を学んでいて、簡単なチェックをしたいと思っています。

基本的に、ユーザーはメール アドレスを入力してフォームを送信します。メール アドレスが特定の mysql テーブルに既に含まれている場合、スクリプトはエラーで停止する必要があります。

これは私の例です:

$userEmail = sanitize($_POST['specials']);          
// Check to see if email already exists, if not proceed
if ($stmt = $link->prepare("SELECT email FROM specials WHERE email=$userEmail"))
{
    $specialsErrorFocus = 'autofocus="autofocus"';
    $specialsInfo = 'This email address: $userEmail, is already in our database.';
    include "$docRoot/html/shop/home.html.php";
    exit();
}

このコードは、説明したように意図したとおりには機能しません。

誰かが私がこれで間違っている場所を説明してください。または、このタスクのより良い解決策を提供してください。

前もって感謝します!

4

2 に答える 2

2

ステートメントを準備するだけでは不十分なため、最初にクエリを実行する必要があります。複数段階のプロセスであるため、ドキュメントを参照してください。

まず、ステートメントを準備します。

$stmt = $link->prepare("SELECT `email` FROM `specials` WHERE `email` = ?")
if (!$stmt) {
   echo $link->errno . " : " . $link->error;
}

次に、パラメーターをバインドします。

if (!$stmt->bind_param("s", $userEmail)) {
    echo $stmt->errno . " : " . $stmt->error;
}

最後に、クエリを実行します。

if (!$stmt->execute()) {
    echo $stmt->errno . " : " . $stmt->error;
}

結果を取得します。

$stmt->store_result();

if ($stmt->num_rows) {

   # Email exists
}
于 2012-05-19T10:21:34.910 に答える
1

Prepare はステートメントを実行しません。mysql::queryを使用してステートメントを実行できます。

あなたの例は次のようになります。

$result = $link->query("SELECT email FROM specials WHERE email=$userEmail");    
if ( $result ) {
    if ( $result->num_rows > 0 ) {
        $specialsErrorFocus = 'autofocus="autofocus"';
        $specialsInfo = 'This email address: $userEmail, is already in our database.';
        include "$docRoot/html/shop/home.html.php";
        exit();
    }
}
于 2012-05-19T10:48:51.670 に答える