У меня есть странная проблема с моим кодом. Все работает нормально до этого: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;
}
?>
Вы 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
Прекратите использование расширения mysql PHP. Он устарел и будет удален в будущем (не до сих пор). Используйте ['mysqli'] (http://php.net/manual/en/book.mysqli.php) или [' PDO'] (http://php.net/manual/en/book.pdo.php) , – axiac