Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 奇怪的MySQL通配符行为_Php_Mysql_Wildcard - Fatal编程技术网

Php 奇怪的MySQL通配符行为

Php 奇怪的MySQL通配符行为,php,mysql,wildcard,Php,Mysql,Wildcard,我遇到了一个奇怪的行为,我在PHP代码中无法理解它 使用此代码(暂时省略全部内容)--> $searchFor由用户输入定义,并通过AJAX请求发送。结果作为$tvLine存储在$result中。然后,它以html格式显示,带有$tvLine['showName'] 现在让我们假设我正在寻找ss.showName“Joni和朋友”。。。 如果我在“Joni and”中输入任意数量的字母,我会得到正确的结果-->“Joni and Friends” 同样,如果我在“Friends”中输入任意数量的

我遇到了一个奇怪的行为,我在PHP代码中无法理解它

使用此代码(暂时省略全部内容)-->

$searchFor
由用户输入定义,并通过AJAX请求发送。结果作为
$tvLine
存储在
$result
中。然后,它以html格式显示,带有
$tvLine['showName']

现在让我们假设我正在寻找ss.showName“Joni和朋友”。。。 如果我在“Joni and”中输入任意数量的字母,我会得到正确的结果-->“Joni and Friends” 同样,如果我在“Friends”中输入任意数量的字母,我会得到正确的结果-->“Jonie 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 &nbsp; &nbsp; <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();
if(isset($\u GET['userInput'])){
$searchFor=$\u GET['userInput'];//实际的用户搜索内容
$searchDate=$\u GET['sDate'];//确定搜索的正确日期
$searchTz=$\u GET['sTz'];//确定用于搜索的正确时区
//用于检查MySQL时差的条件语句
如果($searchTz==“UK”){$searchTz=0;}
else{$searchTz=5;}
全球$wpdb;
$now=日期(“Y-m-d H:i:s”);
$params=array($now);
$sql=“选择se.*、ss.showName、TIMEDIFF(现在()、UTC时间戳)作为服务器日期
选自showpress_剧集
如se所示,左侧连接showpress_如ss所示
在se.showId=ss.id上
其中ss.showName类似“%”“$searchFor.”
和日期(EpicodeStartTime)=当前日期()+间隔$searchDate天
和eposodestarttime>=NOW()-间隔$searchTz小时
按时间顺序排列
";
$result=$wpdb->get_results($wpdb->prepare($sql,$params),ARRAY_A);
?>
搜索结果X
你应该读到:

代码应该是这样的(未经测试,我没有wordpress可供测试):

你应该读到:

代码应该是这样的(未经测试,我没有wordpress可供测试):


您的代码存在SQL注入的风险。您应该尽快更正此问题。输出最终的、完全转义的查询和检查。我怀疑您正在某个地方通过类似sprintf的方式运行它,并且%F被视为一个控制字符。在这一点上,查看代码将有助于我们回答此问题。添加的代码:好。我认为控制字符问题必须是be当我在开始处添加第二个%时发生了什么..然后搜索功能正常。如果你能解释的话,我想我不理解控制字符。谢谢你的代码有SQL注入的风险。你应该尽快更正此问题。输出最终的、完全转义的查询和检查。我怀疑你正在通过类似sp的东西运行它rintf某处,并且%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 &nbsp; &nbsp; <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();
    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);