Получить все данные из массива SQL, как заданное значение - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь извлечь все данные из базы данных, где их теги (массив) похожи на заданное значение.Это то, что я сделал до сих пор ...

$new_string = 'nice phone';
$construct = mysql_query("SELECT tag_array, name, id FROM details 
WHERE tag_array LIKE $new_string%")
or die("<p>died 20: $construct<br>" . mysql_error());

while($getThis = mysql_fetch_array($construct)){
echo $getThis['id'].'<br />';
echo stripslashes($getThis['name']).'<br />';
}

Это не работает ВСЕ.Не могли бы вы указать мне правильное направление?Я действительно борюсь !!

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Вы должны поместить $ new_string в кавычки.

ПРИМЕЧАНИЕ Это очень плохая практика, и вы всегда должны экранировать все переменные, передаваемые в SQL.Вы должны действительно прочитать SQL-инъекцию и другие вопросы безопасности.

Также, если вы хотите сопоставить $ new_string где-нибудь в tag_array (что вам, скорее всего, нужно), вам также нужно добавить знак доллара перед ним.Вы можете прочитать больше в Справочное руководство по MySQL .

Итак, в конце концов:

"SELECT tag_array, name, id FROM details WHERE tag_array LIKE '%" . mysql_real_escape_string($new_string) . "%'"
0 голосов
/ 16 мая 2011

Вы должны очистить данные перед тем, как поместить их в запрос, например:

  $new_string = "blah...; DROP TABLE tag_array; #";
  $sql = mysql_real_escape_string($new_string);
  $sql = "SELECT tag_array, name, id FROM details WHERE tag_array LIKE %'$sql'%"

Этого недостаточно, хотя это просто помогает предотвратить внедрение SQL, рассмотрите возможность использования регулярных выражений для очистки данных.Если вы еще не знаете о regexp, посетите этот сайт: regexp info .Это мне помогло.

...