mysql — функция поиска в PHP работает с числовыми значениями, но не работает с буквами / словами

Люди могут заказывать ссылки на моей платформе, и они хранятся в двух разных таблицах, например, wp_project и wp_articles. Причина этого в том, что когда люди размещают заказ на 1 ссылку, создается одна строка проекта и создается одна строка статьи.

Однако, если клиент заказывает 10 ссылок, будет одна запись проекта и десять статей статьи. Теперь это не очень относится к моей проблеме, но просто для того, чтобы объяснить, как работает система.

Существует два общих идентификатора для проектов и статей, и идентификатор, и название проекта хранятся как в inpu_project, так и в inpu_articles.

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

Проблема начинается, когда я хочу искать по названию проекта вместо ID, который не числовой, а просто слова (иногда с пробелами).

Это для предотвращения ошибки неопределенного индекса в моих журналах ошибок

    $where_clouse='';

Это функция поиска по названию проекта:

    if(isset($_GET['todo']) && $_GET['todo']=='search')
{
if($_GET['proid']!=0){
$where_clouse.=' AND P.`project_title`='.$_GET['proid'];
}
}

Это запрос к базе данных, чтобы извлечь ссылки из него:

    $sql="SELECT P.`project_title`, P.`backlink` FROM `inpu_articles` AS P
WHERE P.`post_it_posted` = '1' ".$where_clouse."  ORDER BY P.`project_title`  ASC";
$backlinks=$wpdb->get_results($sql, ARRAY_A);

Это реальная функция поиска, которая запускает первый код, который я вставил:

    <p>Select a project title and hit search!</p>
<form action="" method="get">
<input type="hidden" name="todo" id="todo" value="search" />
<select name="proid" id="proid">
<option value="0">All Projects</option>
<?php $projects=getTitles(); foreach($projects as $project){ ?>
<option value="<?php echo $project['title']; ?>" <?php if(isset($_GET['proid']) && $_GET['proid']==$project['title'] ) { echo 'selected="selected"';  } ?> ><?php echo $project['title'] ?>
</option>
<?php } ?>
</select>
<input class="submit_search" type="submit" id="search_button" value="Search"/>
</form>

И этот код извлекает названия проектов из таблицы проектов:

    function getTitles($where=false)
{
global $wpdb;
$sql="SELECT  `title`, `link` FROM `inpu_project` WHERE `link`='1' ORDER BY `title` ASC";
$result = $wpdb->get_results($sql, ARRAY_A);
return $result;
}

Все довольно просто и работает на 100% нормально, если я заменю нецифровый заголовок в коде для таблиц inpu_articles и inpu_project числовым идентификатором.

Затем код делает именно то, что делает, но когда я использую вместо него название проекта, он просто показывает ВСЕ ссылки, которые когда-либо заказывал каждый клиент, и в моей базе данных не появляется никаких ошибок. Как будто он не может найти совпадение или что-то, что довольно странно.

Так я что-то здесь упускаю? Разве невозможно сопоставить слова или я должен что-то изменить, используя слова вместо числовых значений?

И наконец, для чего это стоит, это код, который повторяет запрос:

    <?php foreach ($backlinks as $backlink) {
$backlink_overview=$backlink['backlink'];
?>
<ul>
<li><?php echo $backlink_overview; ?></li>
</ul>
<?php } ?>

Заголовки отображаются в раскрывающемся меню формы / поиска, поэтому я удивлен, что он не может сопоставить заголовок проекта с заголовком, который хранится в таблице статей.

Моя интуиция говорит, что это где-то не так:

    P.`project_title`='.$_GET['proid'];

Но он не выдает никаких синтаксических ошибок или каких-либо ошибок, он просто показывает все ссылки, которые хранятся в таблице inpu_article, полностью игнорируя мою функцию поиска.

0

Решение

Проблема в состоянии для where_clause и where_clause сам.
Для проверки ввода необходимо проверить, установлен ли параметр и не является ли он пустым. Затем для предложения where нужно поместить строку в кавычки. Измените эту часть кода, как показано ниже

if(isset($_GET['proid']) && !empty($_GET['proid'])){
$where_clouse.=" AND P.project_title='".$_GET['proid']."'";
}
0

Другие решения

Я думаю, что вы можете ошибаться в заявлении SQL. И вы можете распечатать строковый оператор sql на экране и скопировать его в Mysql для проверки. Я надеюсь, что вы можете найти свою ошибку.

0