2016-07-31 10 views
1

私のテーブルに一意の値の列を作り、値が既にテーブルに挿入されているかどうかを確認するためにphpを使います。たとえば、1つのユーザー名を2回使用することはできません。 データベースから値を取得するためにSELECTを使用しようとしましたが、機能しません。データベースで重複を避けるためにphpを使用するには?

echo $conn->query("SELECT DISTINCT Username 
FROM UserDetail;"); 

それは言う: キャッチできる致命的なエラー:クラスmysqli_resultのオブジェクトが文字列

+0

可能な重複している[MySQLではどのように「存在しない場合は挿入」に?](http://stackoverflow.com/questions/1361340/how-to-insert-if- not-exists-in-mysql) – revo

答えて

1

に変換することができませんでした。この問題は、PHPで解決すべきではない、私はそのようにテーブルから値をエコーし​​ようとした これはデータベース設計の問題であるためです。代わりに、UserDetailテーブルを変更して、重複を挿入しようとするクエリをDBが拒否するようにします。これは、実行クエリです:

$sql = 'ALTER TABLE UserDetail ADD UNIQUE INDEX (`Username`)'; 
$result = $conn->query($sql); 

if($result) echo 'Success!'; 
else echo $conn->error; 

あなたがこれを正常に完了したら、このテーブル内の重複Username値を入力することはできません。クエリは実行されず、エラーが発生します。今

スクリプトがINSERTからINSERT IGNOREにあなたのINSERTクエリを変更、すでに存在しているユーザ名を挿入しようとするとエラーを回避するために:

$sql = "INSERT IGNORE INTO UserDetail SET Username='$escaped_new_username'"; 
$result = $conn->query($sql); 

あなたのコードが失敗したところであなたがエコーしようとしているので、 $conn->queryの結果ですが、文字列ではありません。 DBの結果を示すまでの手順は以下のとおりです。

  1. クエリを実行し(あなたがやった)
  2. 結果はfetchfetch_assocfetch_arrayかを実行して結果を取得し、false
  3. ではないことをチェックすることにより、エラーがなかったことを確認しますそのようないくつかのメソッドの結果
  4. 取得したものを使用または表示します。

    使用しているDBドライバのドキュメントを参照してください。最も一般的なのはMySQLiとのPDO_MySQL

関連する問題