-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. ユーザーは通常の書面で記事のタイトルをdbに入力します
  2. ページが記事をリンクするとき、記事の著者タイトル情報を使用します。通常の記述形式は、句読点を削除してスペースをダッシュ​​に置き換えるカスタム関数で上書きされます

私の目的

アドレスバーから、$_GET['nesne']来ています。これは、記事のタイトルの句読点なしの構文です。また、スペース文字はダッシュ文字に置き換えられます。
私のMySQLテーブルでは、記事のタイトルは句読点とスペースを含む通常の形式です。
例:
私のMySqlテーブル:「ジョンの時計は機能していますか?」、URLアドレス「Is-Johns-Clock-Working」になります

私の質問

動作しないクエリでできることはありますか?削除された句読点をに与えることができない$_GET['nesne']ので、mysqlテーブルとのタイトル行の句読点なしの状態の値を比較する必要があります$_GET['nesne']。たぶん私は非常に間違った方向に進んでいるので、ユーザーがmysqlテーブルに句読点のあるタイトルと1つのタイトル列のみを入力できるようにする自動リンク方法を処理する正しい方法を教えてください。

編集

noktalamasiz =すべての句読点を削除するcustom-php関数。

tire-bosluk-olsun =ダッシュをスペースに置き換えます。したがって、最初のタイトルに句読点が含まれておらず、単語の間にスペースしか含まれていない場合、問題はなく、作業中の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ステートメントを実行してフィールドを取得します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だけでなく、すべてに適用されます。次に、'WHERE'句でaggregate(または組み込み)mysql関数を使用することはできません。

于 2013-03-24T14:10:07.607 に答える