2011-06-18 14 views
0

文字列がMySQL列内で一意であることを確認しようとしています。コードサンプルは次のとおりです。問題MySQLデータベース内の一意のインデントを確認する

<?php 
$con = mysql_connect("hostname", "username", "password"); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("table_name", $con); 


if (!mysql_num_rows(mysql_query("SELECT * FROM table_name WHERE unique_string = '123456' 
LIMIT 1"))) { 

die('This string is not unique.'); 
} 
mysql_close($con); 
?> 

このコードサンプルでは、​​値として123456を入力しました。この例では、文字列123456がすでに列unique_stringに存在することを前提としています。したがって、死んで "この文字列は一意ではありません"というステートメントを返します。残念ながら、そうではありません。なぜなのかご存知ですか?このチェックを行うより良い方法はありますか?

答えて

2

通常、関数呼び出しをチェーン化するのは賢明ではありません。特にデータベース呼び出しで。 mysql _ *()関数は、ステートメントハンドルのようなものが渡されることを期待していますが、問題があればハンドルの代わりにブール型のFALSEを返すことができます。このFALSEはハンドルの代わりに渡され、すべてが壊れてしまいます。

A一般的なルールは常に何らかの形で失敗するクエリを想定しており、守備プログラム:その向こう

$sql = "SELECT ...."; 
$result = mysql_query($sql) or die(mysql_error()); 
$rows = mysql_num_rows($result); 
if ($row !== 0) then 
    die("Not unique"); 
} 

は、クエリ文は文法的に正しいことが見えません。なぜそれが戻ってくるのを見ていないのですか?

$row = mysql_fetch_assoc($result); 
var_dump($row); 

正確に何が一致しているかを確認してください。たぶんあなたはテーブルの価値を持っておらず、それがそこにあると誤解しているかもしれません。

+0

トラックに戻ってくれてありがとう: – Presto

0
Select count(*) from yourtable where mycolumn = 'unique string' 

あなたは今、これはあなたがDBのためにも、 "TABLE_NAME" を使用し1

0

を返したかどうかをテストする必要があります。これは正しいです?そうでなければ、mysql_select_db()は失敗し、DBが選択されていないため、クエリも失敗します。

+0

はい、私の編集エラーです。私はmysql_select_db( "db_name"、$ con)を行った。 – Presto

関連する問題