3

列不明エラーの原因となっている非常に基本的な選択ステートメントがあります。変数で数字だけでなく文字を使用しようとすると、クエリの問題が発生します。照合と関係があるのだろうか。

これが私がこれまでに持っているものです:

$titleno=$_REQUEST['title_no'];
$titleno=mysql_real_escape_string($titleno);
$titleno = utf8_decode($titleno); //tried without this before but didn't work
$query="SELECT * FROM `Titles` WHERE `title-no` = '".$titleno."'"; 
//tried various versions of this query - left it as single quotes as that seems to be the correct way. This only fails when a character is entered. Numbers work fine.  

echo "query - <br> $query <br>";    
$get_title_result=mysql_query($query) or die(mysql_error());
//here I get the unknown column name error - MySQL treats the titleno as the column name 

エコー出力:

SELECT * FROM `Titles` WHERE `title-no` = '1234566d' 
Unknown column '1234566d' in 'where clause'

title-no に 'd' を使用しなかった場合、正常に動作します....また、ハイフンを含まない別の列名を試しても、同じ動作が得られます。DB は、title-no の照合を latin1_swedish_ci として定義します。(クエリを mysqladmin に貼り付けた場合、この問題は発生しません)

テーブル定義は次のとおりです。

CREATE TABLE `Titles` (  
 `id` int(11) NOT NULL auto_increment,  
 `title-no` varchar(15) NOT NULL,  
  UNIQUE KEY `title-no` (`title-no`),  
  KEY `id` (`id`)  
  ) ENGINE=MyISAM  
  AUTO_INCREMENT=9090949 DEFAULT CHARSET=latin1 AUTO_INCREMENT=9090949 ;

解決済み:問題はこのクエリにはありませんでした。後続のクエリでした。このクエリをエコーするだけだったので、混乱しました。私の悪い。ご支援いただきありがとうございます!:)

4

2 に答える 2

0

試してみてください:

$query = "SELECT * FROM Titles WHERE `Titles`.`title-no` = '" . $titleno . "'"; 
于 2012-07-14T01:43:25.767 に答える
0

これは、ステートメントベースのクエリへの簡単な変換です (MySQLi を使用し、必要に応じてコードやこの例を調整します)。基礎となる準備済みステートメントエンジンは、準備済みステートメントでプレースホルダーを使用して列名を指定できないことを認識しているため、正しく渡す必要があると想定されいます(ここで期待しています:-)

$titleno=$_REQUEST['title_no'];
$statement=mysqli_prepare($your_mysqli_link, "SELECT `id` FROM `Titles` WHERE `title-no` = ?"); 
mysqli_stmt_bind_param($statement, 's', $titleno);
mysqli_stmt_execute($statement);
mysqli_stmt_bind_result($statement, $found_id);
mysqli_stmt_fetch($statement);
echo "found id: $found_id";
于 2012-07-14T02:31:25.127 に答える