2015-04-10 3 views
-1

У меня есть странная проблема с моим кодом. Все работает нормально до этого:SELECT * FROM работает неправильно со строкой из php-кода

SELECT * FROM test WHERE result="normal" 

Эта строка не может быть найдена. Однако он успешно вставлен в базу данных. Он не может быть найден даже непосредственно из командной строки MySQL. Однако, когда я вставляю еще одну строку в таблицу непосредственно из командной строки MySQL, а не из кода, ее можно найти (но только из командной строки тоже не выполняется поиск из кода). Я думаю, что это имеет какое-то отношение к кодировке, но, как видите, я уже использовал utf-8 везде!

<?PHP 
header("Content-Type: text/html; charset=utf-8"); 
?> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 

<?php 

mysql_query("SET NAMES utf8"); 
mysql_query("SET CHARACTER SET utf8"); 

require_once 'login.php'; 
$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) 
    die(mysql_error()); 

mysql_select_db($db_database) or die(mysql_error()); 

$result = mysql_query('CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT KEY, script_name VARCHAR(25), start_time INT, end_time INT, result VARCHAR(16)) ENGINE MyISAM'); 





for ($i = 0; $i < 10; $i++) { 

    $input  = array(
     'normal', 
     'illegal', 
     'failed', 
     'success' 
    ); 
    $rand_keys = array_rand($input, 1); 
    $a   = $input[$rand_keys] . "\n"; 


    $insert = rand(); 


    $query = "INSERT INTO test VALUES" . "('$insert', '$insert', '$insert', '$insert', '$a')"; 
    $result2 = mysql_query($query); 

} 



$query2 = 'SELECT * FROM test WHERE result = "success"'; 
$result3 = mysql_query($query2); 

if($result3 === FALSE) { 
echo "Oops!"; 
} 

$rows = mysql_num_rows($result3); 

for ($j = 0; $j < $rows; $j++) { 
    $row = mysql_fetch_row($result); 
    echo <<<_END 
<pre> 
id: $row[0] 
script name: $row[1] 
start: $row[2] 
end: $row[3] 
result: $row[4] 
</pre> 

_END; 


} 
?> 
+0

Вы concating '\ n' ваших' result' значений -> '$ а = $ вход [$ rand_keys]. "\ n"; ', поэтому, когда вы вставляете их,' "INSERT INTO test VALUES". "('$ insert', '$ insert', '$ insert', '$ insert', '$ a')"; ',' normal' имеет разрыв строки, поэтому 'SELECT * FROM test WHERE result =" normal «' не будет соответствовать. Попробуйте 'SELECT * FROM test WHERE result =" normal% "' – Sean

+0

Прекратите использование расширения mysql PHP. Он устарел и будет удален в будущем (не до сих пор). Используйте ['mysqli'] (http://php.net/manual/en/book.mysqli.php) или [' PDO'] (http://php.net/manual/en/book.pdo.php) , – axiac

ответ

2

Проблема здесь:

$a = $input[$rand_keys] . "\n"; 
         ^^^^^^ why? 

Вы никогда не найдете точное совпадение любое из слов вы случайно вводные, как вы добавляете \n в конце каждого из них.

Вы, вероятно, хотите:

$a = $input[$rand_keys]; 
1

Если вы используете mysql_query ($ query2) или die (mysql_error()); вместо просто mysql_query ($ query2); это поможет вам отладить.

Смежные вопросы