以下は、行が存在するかどうかを確認するための試行、テスト、および実証済みの方法です。
(私が自分で使用しているもの、または過去に使用したことがあるものもあります。)
編集: mysqli_query()
を使用した構文で以前にエラーが発生しました 2回。リビジョンを参照してください。
つまり:
if (!mysqli_query($con,$query))
これは単にif (!$query)
と読む必要があります 。
- その間違いを見逃してしまったことをお詫びします。
補足: 両方の'".$var."'
および'$var'
同じことをします。どちらか一方を使用できます。どちらも有効な構文です。
編集された2つのクエリは次のとおりです。
$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($con));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
そしてあなたの場合:
$query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($dbl));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
mysqli_
を使用することもできます プリペアドステートメント付き
方法:
$query = "SELECT `email` FROM `tblUser` WHERE email=?";
if ($stmt = $dbl->prepare($query)){
$stmt->bind_param("s", $email);
if($stmt->execute()){
$stmt->store_result();
$email_check= "";
$stmt->bind_result($email_check);
$stmt->fetch();
if ($stmt->num_rows == 1){
echo "That Email already exists.";
exit;
}
}
}
<?php
$email = $_POST['email'];
$mysql_hostname = 'xxx';
$mysql_username = 'xxx';
$mysql_password = 'xxx';
$mysql_dbname = 'xxx';
try {
$conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit( $e->getMessage() );
}
// assuming a named submit button
if(isset($_POST['submit']))
{
try {
$stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?');
$stmt->bindParam(1, $_POST['email']);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
}
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
if($stmt->rowCount() > 0){
echo "The record exists!";
} else {
echo "The record is non-existant.";
}
}
?>
- プリペアドステートメントは、SQLインジェクションから保護するために使用するのが最適です。
N.B .:
上記で使用/概説されているフォームとPOST配列を処理するときは、POST配列に値が含まれていること、フォームにPOSTメソッドが使用されていること、入力の名前付き属性が一致していることを確認してください。
- FYI:明示的に指示されていない場合、フォームはデフォルトでGETメソッドになります。
注:<input type = "text" name = "var">
-$_POST['var']
マッチ。 $_POST['Var']
歯が立たない。
- POST配列では大文字と小文字が区別されます。
相談する:
参照のチェックエラー:
- http://php.net/manual/en/function error-reporting.php
- http://php.net/manual/en/mysqli.error。 php
- http://php.net/manual/en/pdo error-handling.php
このQ&Aにアクセスしていて、mysql_
を使用している場合に備えて、MySQLAPIは混在しないことに注意してください。 接続する(およびクエリする)。
- 接続からクエリまで同じものを使用する必要があります。
これについては、以下を参照してください。
mysql_
を使用している場合 APIを使用する選択肢がない場合は、Stackに関する次のQ&Aを参照してください。
mysql_*
関数は非推奨になり、将来のPHPリリースから削除される予定です。
- 21世紀に足を踏み入れる時が来ました。
(a)行にUNIQUE制約を追加することもできます。
参照:
- http://dev.mysql。 com / doc / refman / 5.7 / en / contraint-primary-key.html
- http://dev.mysql.com/ doc / refman / 5.7 / en / alter-table.html
- 重複を避けるために値がすでに存在するかどうかを確認するにはどうすればよいですか?
- 既存のテーブルに一意のキーを追加する方法(一意でない行を含む)