0

こんにちは、データベースにレストラン名のリストがあり、名前の一部に のような文字 &, @, and ' (quote)が含まれています。表示時に名前がブラウザに表示される方法は、http://localhost/my-restaurant-new-yorkこの関数を使用して空のスペースをダッシュ​​に置き換えるためです-

$businessDetail = strtr($businessDetail, '-', ' ');

ビジネス名に基づいてビジネス ID が検出され、すべての関連情報が取得されます。私のデータベースに次のような名前がある場合、My Restaurant New & york次のようにSQLでエラーが発生します

Message: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3.

問題は、最初に名前を保存する方法と、特殊文字に問題なく名前を元に戻す方法です。ありがとう

更新:私はzendフレームワークを使用しているので、これが名前をdbに保存して元に戻す方法です

$testMapper = new Application_Model_Mapper_TestMapper();
$testModel = new Application_Model_Test();

$bzname =  str_replace("'", '', $this->_getParam('name'));
$testModel->setId($id)
          ->setName($bzname);
$business_id = $testMapper->save($testModel);

ビジネス名へのすべてのリンクは、この関数によって翻訳されます

$this->view->bzurl = preg_replace("![^a-z0-9]+!i","-", $result['business_name']);

アップデート2:

public function getBusinessId($business_detail)
    {
        $select = $this->getDbTable()->getAdapter()->select();
      $select->from('business',array('business_id'))

               ->where("business_name='".$business_detail."'"); 



        $result = $this->getDbTable()->getAdapter()->fetchRow($select);
        return $result['business_id'];      
    }
4

1 に答える 1

2
->where("business_name='".$business_detail."'")

次のようにする必要があります。

->where("business_name = ?", $business_detail)

データが正しくエスケープされるようにします。それがエラーを生成するクエリである場合、問題は解決するはずです。SQLインジェクションとそれを回避する方法について少し読んでおくことをお勧めします。

于 2013-01-30T01:30:50.380 に答える