PHP: Как я могу превратить MySQL текст или тип BLOB в строку? - PullRequest
1 голос
/ 16 января 2010

У меня разочаровывающий опыт в PHP, потому что я продолжаю возвращать свое поле MEDIUMTEXT в виде нестроковой строки. Когда я проверяю тип переменной, он говорит, что это строка, но на самом деле это массив, в основном массив символов, поэтому я делаю:

while ($row = mysql_fetch_assoc($records)) {
  print_r($row["myText"]);
}

Который вместо того, чтобы распечатывать фактический текст, хранящийся там, такой как «здесь строка», он просто печатает 1. Это сбивает с толку, потому что я спрашиваю, что это тип данных, и он говорит строку ... Однако, если я делаю

$row["myText"][0]

Он вернет "ч". Я полностью заблудился о том, как я могу изменить это значение в строку, я имею в виду, что я предполагаю, что в php есть какая-то функция, но я не могу его найти. Я также понятия не имею, почему он говорит, что это не массив.

Есть идеи?

редактировать по запросу

MySQL запрос

select * from snippets

a print_r: текст - это имя столбца MEDIUMTEXT в MySQL. Остальные не связаны

Array ( [index] => 1 [name] => a name [language] => english [text] => ) 1

edit2:

Весь код, выдавший эту ошибку:

$username = "root";
$password = "";
$hostname = "localhost"; 
$dbname = "TestSnippets";

$dbh = mysql_connect($hostname, $username, $password) 
$selected = mysql_select_db("snippets",$dbh); 

$records = mysql_query("select * from snippets");

while ($row = mysql_fetch_assoc($records)) {
   echo print_r($row);
}

Это выдает ошибку каждый раз. Все остальные поля находятся в полном порядке. Однако не в поле MEDIUMTEXT.

Edit3:

Я попытался установить новый веб-сервер (Apache) и новую версию PHP, но у него все еще есть та же проблема. Интересно, что когда я вызываю php-cgi.exe, он возвращает данные с этой переменной, выводимой правильно. Я понятия не имею, что это может быть, единственное, что я могу установить другую версию MySQL. Я попробую это завтра и доложу.

edit4: Я решил это сам, имея в виду то, что мне здесь сказали. Смотрите мой ответ на мой собственный вопрос ниже.

Ответы [ 3 ]

3 голосов
/ 16 января 2010

Вы должны просто использовать ...

while ($row = mysql_fetch_assoc($records)) {
  echo $row["text"];
}

... до тех пор, пока 'text' является соответствующим полем в таблице, которую вы используете. Тот факт, что вы используете средний текст, не имеет отношения к PHP (язык, который не печатается).

Если это не сработает, значит, проблемы в другом месте.

2 голосов
/ 16 января 2010

В php вы можете получить доступ к строкам, таким как массивы. Таким образом, вы можете получить символы из строки по их индексу.

поэтому, когда вы вызываете $row["myText"][0] для значения, которое "здесь строка". Вы получаете первый символ с индексом 0, который равен «h».

если вы позвоните $row["myText"][6], вы должны получить «i» для начала is.

0 голосов
/ 17 января 2010

Ничего себе, я решил проблему, проблема была в том, что я был невероятно тупым.

Я не заметил в моих запросах mysql, что моя тестовая строка была на самом деле

<? myString" ?>

Мне даже не пришло в голову, что php в итоге будет анализировать это утверждение, а не выводить его. Вот почему он появился, когда я запустил php-cgi.exe, но не в самом браузере, так как дисплей немного другой.

Ух ты, просто умопомрачительный. Тем не менее, спасибо всем за вашу помощь, без того, чтобы вы сказали мне ответ, я бы пошел по неверному пути за другим.

Тайна раскрыта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...