Как сделать Exect Match на MySQL?
Как сделать абсолютное совпадение запросов MySQL. Так как я получаю коллизию, если пользователь пытается вызвать URL-адрес или файл по короткой ссылке domain.ltd/NGV, которая сталкивается с 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;
}
битный код.htaccess
RewriteRule ^([a-zA-Z0-9-]+)/?$ api.php?rid=$1 [L,QSA]
и вот последний бит кода для генерации реальных коротких ссылок, что также может быть проблемой, так как я не уверен, что отбрасывает вещь назад в настоящий момент
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);
2 ответа
Если я вас правильно понимаю, вы хотите использовать оператор BINARY для сопоставления с учетом регистра:
$q = mysql_query("SELECT * FROM `media` WHERE BINARY `qp_tag` = '".mysql_escape_string($tag)."' LIMIT 1");
Это так же, как ваш запрос выше, но я вставил слово BINARY
в сравнении.
Обратите внимание, что, если вы это сделаете, возможно, вы не сможете в полной мере воспользоваться любыми индексами в столбце сравнения. Это может не быть проблемой для вас, но примите это во внимание, если в вашей таблице много строк.
Чтобы получить точное соответствие, вы можете изменить параметры сортировки на qp_tag
столбец, чтобы быть чувствительным к регистру сопоставления. Это сопоставления, оканчивающиеся на _cs, например latin1_general_cs . Сортировка по умолчанию обычно latin1_swedish_ci
, который не зависит от регистра.