2012-03-29 2 views
-5

Я делаю это PHP программа для доступа к MySQL данныеКак мы кодируем специальный символ mysql в PhP?

foreach ($arrayOfID as $ID)  { 
    $IDWhere[]="TB.ID LIKE '" .$ID."'"; 
    //$IDWhereOther[]="Business LIKE '".$ID."'"; 
    // $IDWhereFinalOther1[]=$ID; 
    $IDWherePhone[]="BusinessID LIKE '".$ID."'"; 
    //$IDWhereURLandImage[]="`Business ID` LIKE '".$ID."'"; 
    $newOutput[$ID]=array(); 
    $copy[$ID]=array(); 
    keyID2[]=$ID; 
    $IDtoBuilding[]="TB.ID LIKE '".$ID."'"; 
} 
IDWhereFinal=implode(" OR ", $IDWhere); 
//$IDWhereFinalOther=implode(" OR ", $IDWhereOther); 
//$IDFinalBuilding=implode(" OR ", $IDtoBuilding); 
//$query="Select *, Country FROM `tablebusiness` As TB, `tablecity` As TC WHERE (".$IDWhereFinal.") AND TB.City=TC.City"; 
//$query="Select *, Country, Building.Title FROM `tablebusiness` As TB, `tablecity` As TC, `tablebusiness` As Building WHERE (".$IDWhereFinal.") AND TB.City=TC.City And (Building.ID=TB.Building OR TB.Building=0)"; 
//$query="Select *, Country, COALESCE(NULL,(select Title from `tablebusiness` As TBuild where TBuild.ID=TB.Building)) as BuildingTitle FROM `tablebusiness` As TB, `tablecity` As TC, `tablebusiness` As Building WHERE (".$IDWhereFinal.") AND TB.City=TC.City"; 
$query="Select *, Country, (select Title from `tablebusiness` As TBuild where TBuild.ID=TB.Building) as BuildingTitle FROM `tablebusiness` As TB, `tablecity` As TC WHERE TB.City=TC.City and (".$IDWhereFinal.")"; 
$data = mysql_query($query); 

Проблема в том, иногда $ID содержит '

Я думаю, что должно быть экранированы в ''

Но ' не может быть единственной проблемой

Возможно, есть и другие символы, которые также должны быть закодированы.

Есть ли функция для этого?

+0

Читайте о 'mysql_real_escape_string' здесь: http://php.net/manual/en/function.mysql-real-escape-string.php – hjpotter92

ответ

1

Абсолютно. Вы должны использовать mysql_real_escape_string. Это также хорошо для безопасности, в основном вы должны ставить каждый раз, когда вы вставляете данные в ваш БД (если это не строка, тогда литье в int/float/etc в порядке)

1

Современный способ сделать это - использовать PHP PDO и подготовленные операторы, которые могут справиться с правильным вылетом для вас. Таким образом, ваш запрос будет стать чем-то вроде этого

Select *, Country, (
    select Title from `tablebusiness` As TBuild 
    where TBuild.ID=TB.Building) as BuildingTitle 
FROM `tablebusiness` As TB, `tablecity` As TC 
WHERE TB.City=TC.City and (TB.ID LIKE ? OR BusinessID LIKE ?) 
+0

есть введение в PDO руководство? документация не является хорошей –

Смежные вопросы