我遇到了一种奇怪的行为,无法在我的PHP代码中弄清楚
使用此代码(暂时忽略全部)->
WHERE ss.showName LIKE '%".$searchFor."%'
$searchFor
由用户输入定义,并通过AJAX请求发送。结果存储在$result
中作为$tvLine
。然后使用$tvLine['showName'];
现在让我们说我正在寻找ss.showName“ Joni and Friends” ...如果我输入“ Joni and”中使用的任何字母,我都会收到正确的结果->“ Joni and Friends”同样,如果我键入“朋友”中使用的任何字母,我都会收到正确的结果->“乔妮和朋友们”。
但是,如果我只键入“ F”或“ f”,则不会收到结果。
怎么以及为什么会这样?
谢谢
if ( isset($_GET['userInput'])) {
$searchFor = $_GET['userInput']; // the actual user search content
$searchDate = $_GET['sDate']; // ascertains the correct day for search
$searchTz = $_GET['sTz']; // ascertains the correct timezone for search
// conditional statement to check time difference for MySQL
if ($searchTz == "UK"){ $searchTz = 0;}
else { $searchTz = 5; }
global $wpdb;
$now = date("Y-m-d H:i:s");
$params = array($now);
$sql = "SELECT se.*, ss.showName, TIMEDIFF(NOW(), UTC_TIMESTAMP) as server_date
FROM showpress_episodes
AS se LEFT JOIN showpress_shows AS ss
ON se.showId=ss.id
WHERE ss.showName LIKE '%".$searchFor."%'
AND DATE(episodeStartTime) = CURRENT_DATE() + INTERVAL $searchDate DAY
AND episodeStartTime >= NOW() - INTERVAL $searchTz HOUR
ORDER BY episodeStartTime
";
$result = $wpdb->get_results($wpdb->prepare($sql, $params), ARRAY_A);
?>
<h2>Search Results <a id="search_close" onclick="closeForm()">X</a></h2>
<?php
// create table to hold SQL
if (count($result) < 1){
echo ('<p>
<table border="0">
<tr><td>Show Name</td></tr>
<tr ><td colspan="3">NO RESULTS </td> </tr>
<tr><td>'.$searchFor.'</tr></td>
</table>');
}
else{
$display_string .= '<p>
<table border="0" id="ajax-table">';
//$display_string .= "<tr><td>".$searchFor."</tr></td>";
foreach ($result as $tvLine) {
$display_string .= "<tr><td>";
//$display_string .= $tvLine[server_date];
$display_string .= "<a id='". $tvLine[id] ." 'class='pointer search now-playing'>".$tvLine['showName']."</a>";
$display_string .= "</td></tr>";
}
$display_string .= "</table></p>";
}
echo $display_string;
exit();
您应阅读:wpdb::prepare( string $query, mixed $args )
代码应如下所示(未经测试,我没有要测试的wordpress:)
global $wpdb;
//$now = date("Y-m-d H:i:s");
$params = array("%".$searchFor."%", $searchDate, $searchTz);
$sql = "SELECT se.*, ss.showName, TIMEDIFF(NOW(), UTC_TIMESTAMP) as server_date
FROM showpress_episodes
AS se LEFT JOIN showpress_shows AS ss
ON se.showId=ss.id
WHERE ss.showName LIKE %s'
AND DATE(episodeStartTime) = CURRENT_DATE() + INTERVAL %d DAY
AND episodeStartTime >= NOW() - INTERVAL %d HOUR
ORDER BY episodeStartTime
";
$result = $wpdb->get_results($wpdb->prepare($sql, $params), ARRAY_A);