php mysql获取带有字符问题的名称

时间:2013-01-30 01:02:04

标签: php mysql zend-framework

您好我的数据库中有一个餐馆名称列表,其中一些名称带有&, @, 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框架,所以这就是我如何将名称保存到数据库并检索回来

$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']);

UPDATE2:

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'];      
    }

1 个答案:

答案 0 :(得分:2)

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

应该是:

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

确保数据被正确转义。如果这是生成错误的查询,那应该可以解决您的问题。我建议你阅读一些关于SQL注入的内容以及如何避免它。