Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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\u查询上进行exect匹配?_Php_Mysql_.htaccess_Dynamic Links - Fatal编程技术网

Php 如何在mysql\u查询上进行exect匹配?

Php 如何在mysql\u查询上进行exect匹配?,php,mysql,.htaccess,dynamic-links,Php,Mysql,.htaccess,Dynamic Links,如何进行绝对MySQL查询匹配。因为如果用户试图通过短链接domain.ltd/NGV调用url或文件时,我似乎会遇到冲突,这会与domain.ltd/NGV冲突,从而强制获取脚本拉取/NGV文件而不是/NGV 下面是执行MySQL选择的代码,还提供了htaccess位 $tag = $_REQUEST['rid']; $q = mysql_query("SELECT * FROM `media` WHERE `qp_tag` = '".mysql_escape_string($tag).

如何进行绝对MySQL查询匹配。因为如果用户试图通过短链接domain.ltd/NGV调用url或文件时,我似乎会遇到冲突,这会与domain.ltd/NGV冲突,从而强制获取脚本拉取/NGV文件而不是/NGV

下面是执行MySQL选择的代码,还提供了htaccess位

 $tag = $_REQUEST['rid'];

 $q = mysql_query("SELECT * FROM `media` WHERE `qp_tag` = '".mysql_escape_string($tag)."' LIMIT 1");

 $r = mysql_fetch_row($q);

 if(!empty($r)) {

     $f = stripslashes($r['file']);
     $t = stripslashes($r['type']);

     $c = file_get_contents($f);

     $api_html = <<<API_HTML_VIEW
     $c
             API_HTML_VIEW;

     echo $api_html;

 } else {

     $api_html = <<<API_HTML_VIEW
     We are sorry but we cannot find requested resource :(
             API_HTML_VIEW;

     echo $api_html;

 }
这里是生成实际短链接的最后一段代码,这也可能是问题所在,因为我不确定目前是什么让事情倒退

function qp_tag() {

     $file_tag = $_FILES['file']['name'];
     $file_uni = uniqid();
     $short = strtolower(substr(base64_encode(crc32($file_tag)), 0, 3));  

     return $short;

}
编辑:系统现在可以工作。唯一的问题是,如果它是一个文件,它在选择文件时滞后于分配

 $f = $r['file'];
 $t = $r['type'];
 $s = $r['size'];
 $n = $r['name'];

 header("Pragma: public"); // required
 header("Expires: 0");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Cache-Control: private",false); // required for certain browsers
 header("Content-Type: ".$t."");
 header("Content-Disposition:attachment;filename=".$n."");
 header("Content-Length: ".$s);
 ob_clean(); 
 flush();

 $fp = fopen($f, "r"); 
 while (!feof($fp))
     {
         echo fread($fp, 65536); 
         flush(); // this is essential for large downloads
     }  
 fclose($fp);

如果我理解正确,您希望使用区分大小写的匹配:

$q = mysql_query("SELECT * FROM `media` WHERE BINARY `qp_tag` = '".mysql_escape_string($tag)."' LIMIT 1");
这与上面的查询相同,只是我在比较中插入了单词
BINARY


请注意,若这样做,您可能无法充分利用比较列上的任何索引。这对您来说可能根本不是问题,但如果您的表中有很多行,请将其考虑在内。

要获得精确匹配,您可以在
qp\u标记
列上设置区分大小写的排序规则。这些是以_cs结尾的排序规则,比如拉丁文1 _general _cs。默认的排序规则通常是
latin1\u swedish\u ci
,不区分大小写。

我希望进行绝对运算,因此它从mysql中提取正确的文件/url,所以让我们假设url请求是针对qp\u标记下的文件/url:OGG,它将获得该记录,而不是针对OGG、OGG等的记录。。。因为从我现在得到的情况来看,无论您使用OGG还是OGG,它仍然会调用同一个文件,这不是我想要的,我提供的代码应该与之完全匹配。如果$tag是“OGG”,那么使用
二进制文件
只能得到带有“OGG”的qp_标签的记录。它不会在“OgG”或“OgG”等位置获取记录。我现在开始怀疑htaccess中是否存在问题?但是,htaccess也没什么用处。所以,在api的实际选择中,基于精确的参数是一个问题tag@PTDesu,请尝试我刚刚发布的更新。我将
BINARY
操作符移动到查询中的另一个位置。Great mate:)如果标记与它提供的不匹配,它现在可以工作,否则它会执行它的错误job@PTDesu,如果排序规则为“utf8\u general\u ci”,则您可能可以将其更改为“utf8\u general\u cs”或“utf8\u bin”,以在所有情况下获得区分大小写的字符串匹配(假设没有其他重要内容依赖于排序).BINARY运算符只为一个特定的调用强制转换列。@BenLee实际上它工作正常,如果找不到匹配项,它将失败,我现在遇到的唯一问题是文件选择花费了很长时间,并且挂起了很多。如果您不介意查看代码并告诉我在哪里出错,我会发布代码将文件输出到浏览器如果查询需要很长时间,可能是因为(根据前面提到的警告)它没有使用pg_标记索引。按照@mikel的建议,将排序规则更改为utf8_general_cs,那么您不必使用
BINARY
进行区分大小写的搜索,您的索引仍然可用。
$q = mysql_query("SELECT * FROM `media` WHERE BINARY `qp_tag` = '".mysql_escape_string($tag)."' LIMIT 1");