-2

我在下面的查询

工作查询

$sorgum = "SELECT kolon_etiketler, kolon_yazar, kolon_baslik, kolon_resim_baslik, kolon_resim_url, kolon_yazi, kolon_ytarihi FROM tb_yazilar WHERE kolon_statu = 'onay' AND kolon_yazar ='".tire_bosluk_olsun($_GET["rd_ozne"])."' AND kolon_baslik ='".tire_bosluk_olsun($_GET["rd_nesne"])."'  ORDER by kolon_onaytarihi DESC";

非工作查询

$sorgum = "SELECT kolon_etiketler, kolon_yazar, kolon_baslik, kolon_resim_baslik, kolon_resim_url, kolon_yazi, kolon_ytarihi FROM tb_yazilar WHERE kolon_statu = 'onay' AND kolon_yazar ='".tire_bosluk_olsun($_GET["rd_ozne"])."' AND noktalamasiz(kolon_baslik) ='".tire_bosluk_olsun($_GET["rd_nesne"])."'  ORDER by kolon_onaytarihi DESC";

顺便说一句,工作和非工作的区别

工作:AND kolon_baslik = ...
非工作:AND noktalamasiz(kolon_baslik) = ...

我的链接过程

  1. 用户以正常的书面形式将文章标题输入数据库
  2. 当页面链接文章时,使用文章的作者标题信息。普通书写形式被自定义功能覆盖,以删除标点符号并用破折号替换空格

我的目标

从地址栏,$_GET['nesne']来了。这是文章标题的没有任何标点符号的语法。空格字符也替换为破折号字符。
在我的 MySQL 表中,文章标题采用标准格式,带有标点符号和空格 btw 单词。
例如:
在我的 MySql 表中:“John 的时钟在工作吗?” ,它变成了 url 地址“Is-Johns-Clock-Working”

我的问题

我可以用非工作查询做些什么吗?我不能给它删除的标点符号,$_GET['nesne']所以我需要比较 mysql 表中标题行的无标点符号状态的值和$_GET['nesne']. 也许我走错了路,所以请引导我正确处理自动链接方式,允许用户在 mysql 表中输入标点标题和只有 1 个标题列。

编辑

noktalamasiz = 删除所有标点符号的自定义 php 函数。

Tire-bosluk-olsun = 用空格替换破折号。因此,如果我的第一个标题不包含任何标点符号,而只包含空格 btw 单词,那么我将没有困难,只使用工作 sql。

function tire_bosluk_olsun ($tireli)
{
$tireli = trim($tireli);
$tireli = str_replace('-',' ',$tireli);
return $tireli;
}



function noktalamasiz($noktalamali) {
$noktalamali = trim($noktalamali);
$ara = array('.',',',';',':','...','?','!','-','—','/','\\','“','”','‘','’','"','\'','(',')','[',']','’','{','}','*','&','#','^','<','>','|');
$degistir = array('','','','','','','',' ','','','','','','','','','','','','','','','','','','','','','','',);
$noktalamali = str_replace($ara,$degistir,$noktalamali);
return $noktalamali;
}

什么是非工作

如果我的查询涉及noktalamasiz custom function这样:noktalamasiz(kolon_baslik); 然后我得到了空白屏幕,没有任何警告通知或错误。我正在使用 -1 错误级别。

整个相关的php代码

$sorgum = "SELECT kolon_etiketler, kolon_yazar, kolon_baslik, kolon_resim_baslik, kolon_resim_url, kolon_yazi, kolon_ytarihi FROM tb_yazilar WHERE kolon_statu = 'onay' AND kolon_yazar ='".tire_bosluk_olsun($_GET["rd_ozne"])."' AND noktalamasiz(kolon_baslik) ='".tire_bosluk_olsun($_GET["rd_nesne"])."'  ORDER by kolon_onaytarihi DESC";

if ($beyan = $db_baglanti->prepare($sorgum)) 
{

    /* execute statement */
    $beyan->execute();

    /* bind result variables */
    $beyan->bind_result($etiketler, $yazar, $baslik, $resim_baslik, $resim_url, $yazi, $ytarihi);

    /* fetch values */
    while ($beyan->fetch()) 
    {
        echo '<div class="sol-icerik-kapsar">'."\r\n";
        echo "\t".'<h1>'.$baslik.'</h1>'."\r\n";
        echo "\t".'<img class="mansetresim" width="120" height="160" src="'.sitenin_koku.'img/manset/'.$resim_url.'" alt="'.$resim_baslik.'" title="'.$resim_baslik.'" />'."\r\n";
        echo "\t".'<p><a href="'.sitenin_koku.'yazılar/'.bosluklar_tire_olsun($yazar).'">'.$yazar.'</a>'.' - '.turkcetarih('j F Y',$ytarihi).'</p>'."\r\n";
        echo "\t".'<p>'.$yazi.'</p>'."\r\n";
        echo "\t".'<p>'.$etiketler.'</p>'."\r\n";
        echo '</div>'."\r\n";
    }
    /* close statement */
    $beyan->close();
}
4

4 回答 4

2

您不能在 mysql 查询中使用 php 函数。这不是它的工作原理。为了您的目的,我将创建一个新行,其中填充了您的 php 函数的输出noktalamasiz()

于 2013-03-24T14:01:36.503 回答
1

您无法在 MySQL 查询中运行“自定义 php 函数”。您应该在查询之外运行该函数,从中获取返回值,然后在查询中使用该值。所以你的查询应该是这样的:

$kolon_baslik = //get your field value first;

$sorgum = "SELECT kolon_etiketler, kolon_yazar, kolon_baslik, kolon_resim_baslik, kolon_resim_url, kolon_yazi, kolon_ytarihi FROM tb_yazilar WHERE kolon_statu = 'onay' AND kolon_yazar ='".tire_bosluk_olsun($_GET["rd_ozne"])."' AND " . noktalamasiz($kolon_baslik) . " ='".tire_bosluk_olsun($_GET["rd_nesne"])."'  ORDER by kolon_onaytarihi DESC"
于 2013-03-24T14:00:57.220 回答
1

您需要在查询之前运行该函数,因为您正在做的事情是不允许的:

首先,运行一个 select 语句来获取 field kolon_baslik。接下来,使用您的函数清理输入:

$cleanInput = noktalamasiz($kolon_baslik); /* Assumed you've already gotten the value */

最后,使用清理后的输入运行您的查询:

$sorgum = "SELECT kolon_etiketler, kolon_yazar, kolon_baslik, kolon_resim_baslik, kolon_resim_url, kolon_yazi, kolon_ytarihi FROM tb_yazilar WHERE kolon_statu = 'onay' AND kolon_yazar ='".tire_bosluk_olsun($_GET["rd_ozne"])."' AND '" . $cleanInput . "' ='".tire_bosluk_olsun($_GET["rd_nesne"])."'  ORDER by kolon_onaytarihi DESC";

顺便说一句,你可以清理你的功能:

function noktalamasiz($noktalamali) {
$noktalamali = trim($noktalamali);
$ara = array('.',',',';',':','...','?','!','-','—','/','\\','“','”','‘','’','"','\'','(',')','[',']','’','{','}','*','&','#','^','<','>','|');
$noktalamali = str_replace($ara,'',$noktalamali);
return $noktalamali;
}
于 2013-03-24T14:08:49.747 回答
1

首先, noktalamasiz 不是 mysql 函数,正如您所说的那样,它是一个 php 函数,因此不能将其称为字符串文字,而不仅仅是在 mysql 中,它适用于所有人。其次,您不能将任何聚合(或内置)mysql 函数与“WHERE”子句一起使用。

于 2013-03-24T14:10:07.607 回答