2016-05-12 25 views
0

私は自分のスクリプトにインポートしたMySQLテーブルの列を比較し、それを私が定義したPHP値と比較しようとしています。MySQLテーブルの列を選択してPHP変数と比較する方法

私は、列の値のいずれかが変数と等しいかどうかをチェックするifループを作成しようとしています。

スクリプトの端部は、このようにする必要があり
// Connect to database containing order information 

$servername = "server"; 
$username = "user"; 
$password = "pass"; 

// Create connection 
$conn = new mysqli($servername,$username,$password); 

// Check connection 
if ($conn->connect_error) 
{ 
    die("Connection failed: " . $conn->connect_error); 
} 

// define variables and set to empty values 
$name = $ordernumber = ""; 

// Load up data from the form 

$ordernumber = ($_POST['order_number']); 

// Get SQL info 
$sql = "SELECT order_number FROM p_orders;"; 
if ($conn->query($sql) === TRUE) 
{ 
    echo "Checked Orders....."; 
} 
else 
{ 
    echo "Failed to check orders, please contact Support for assistance" . $conn->error; 
} 

// Checking Script 

if ($ordernumber === $orders) 
{ 
    echo "Order Number Found.... Let's Select a Seat"; 
} 
else 
{ 
    echo "Your Order was not found, either you did not order a reservation ticket, have not waited 3 days or you entered the number wrong. If issues persist then please contact Support." 
    }; 
+0

$ ordersは定義されていますか?私はそれが定義されているのを見ることができません –

+0

あなたは単にあなたのMySQLクエリにWHERE order_number = '$ ordernumber'を追加しないでください。次に、返されたnum_rowsをchkします.1の場合、その注文番号が存在します。 0はありません。 – user3741598

+0

またはmysqli_fetch_assoc経由でデータベースからorder_numberを取得してみてください –

答えて

3

...

$stmt = $mysqli->stmt_init(); 
if ($stmt->prepare('SELECT order_number FROM p_orders WHERE orderID = ?')) { 
    $stmt->bind_param('s',$_POST['order_number']); // i if order number is int 
    $stmt->execute(); 
    $stmt->bind_result($order_number); 
    $stmt->fetch(); 
    if (!empty($order_number)) 
     echo "Order Number Found.... Let's Select a Seat"; 
    }else { 
     echo "Your Order was not found..."; 
    }  
    $stmt->close(); 
} 
$mysqli->close(); 

...クエリは今一致するレコードのみが検索され、に準備された文の使用を注意していることに注意してくださいSQLインジェクションからポスト変数を安全にします。

SQLから一致するアイテムのみを収集する理由は、100万レコードあれば、データベースはそれらのすべてを返し、PHPはそれらをループする必要があります(最大実行、メモリなどを引き起こす可能性があります)。エラー)。代わりにデータベースは、このようなものを探すために構築されています - このフィールドのインデックスに注意して、 "youtube style" idの使用もお勧めします。なぜなら、私は文字列を数字は変数minghtを暗示しています - それはいくつかの理由で良い "id"ではありません...私はここで詳しく説明しない "youtube style" idを説明するリンクを追加しましたが、基づいてを

を更新しました:)ことを使用して勝利をたくさん...

+2

[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli- stmt.bind-param.php)。手動でエスケープして物事を混乱させないでください。 – tadman

+0

tadmanこれは非常に良い点です。 – Barry

+1

'mysqli'を定期的に使用するのは、実際にはコードが少なく、間違いを起こす可能性が低いからです。 – tadman

0

が好ましく使用。

$mysqli = new mysqli("localhost", "my_user", "my_password", "my_db"); 
/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$name = "";  
// Load up data from the form 
$ordernumber = $_POST['order_number']; 

/* create a prepared statement */ 
if ($stmt = $mysqli->prepare("SELECT COUNT(*) FROM p_orders WHERE orderID=?")) { 

    /* bind parameters for markers */ 
    $stmt->bind_param("i", $ordernumber); // "i" if order number is integer, "s" if string 

    /* execute query */ 
    $stmt->execute(); 

    /* bind result variables */ 
    $stmt->bind_result($counter); 

    /* fetch value */ 
    $stmt->fetch(); 

     if ($counter>0) { // if order id is in array or id's 
      echo "Order Number Found.... Let's Select a Seat";  
     } else { 
      echo "Your Order was not found, either you did not order a reservation ticket, have not waited 3 days or you entered the number wrong. If issues persist then please contact Support." 
     } 

    /* close statement */ 
    $stmt->close(); 
} 

/* close connection */ 
$mysqli->close(); 
関連する問題