2016-11-15 1 views
1

PHP를 전혀 알지 못하므로이 문제로 고생하고 있습니다. or 섹션을 MySQL 쿼리에 추가해야하지만 검색중인 값에 큰 따옴표가 있습니다. PHP에 추가하는 방법을 알아야 MySQL에 전달할 수 있습니다. 현재 쿼리는 다음과 같습니다PHP의 큰 따옴표

$query = 'SELECT * FROM ' .$tableName.' WHERE allowed_countries LIKE "%'.$regionId.'%" and skurules REGEXP "i:'.$secondlastdigit.';" and status = 1 ORDER BY id DESC LIMIT 1'; 

하지만처럼 보이는 문자열 값을 검색하는 or 문을 추가해야합니다. '의 $의 secondlastdigit 두 번째 인스턴스를 둘러싼 큰 따옴표

$query = 'SELECT * FROM ' .$tableName.' WHERE allowed_countries LIKE "%'.$regionId.'%" and skurules REGEXP "i:'.$secondlastdigit.';" or skurules REGEXP "s:1:'.$secondlastdigit.';" and status = 1 ORDER BY id DESC LIMIT 1'; 

. '; MySQL에 전달되었을 때. 이 같은

내 JSON 문자열 내가 찾고 있어요 외모 : 모든

a:12:{i:1;s:2:"15";i:2;s:2:"10";i:3;s:2:"30";i:4;s:2:"50";i:5;s:3:"120";i:6;s:3:"240";i:7;s:3:"480";i:8;s:3:"960";i:9;s:4:"3786";s:1:"A";s:3:"100";s:1:"C";s:2:"60";s:1:"B";s:5:"18930";} 

답변

2

첫째 : 은하지 마십시오.

여전히 원한다면 ... 정말하지 마십시오.

직렬화 된 배열에서 SQL 쿼리를 만드는 것은 지옥입니다. 모든 비용을 들이지 않고 피해야합니다.

는 다음 중 하나를

  • 표준 SQL 테이블
  • 으로 직렬화 된 열을 변환 또는 PHP 변수에 열을 선택 문자열을 비 일렬 화하고 그것을 통해 검색 할 수 있습니다.

예 :

$properPhpArray = unserialize($sqlResult['column_name']); 
0

합의, 직렬화 된 문자열을 검색하는 것은 최선의 해결책 어떤 개발자가 bottle_size 테이블을 사용할 수 있음에도 불구하고하지 않았다이다. 빠른 수정과 시간/스킬이 필요하지 않아 세금 계산 magento 확장을 다시 작성 했으므로 지금 문제를 해결하기 위해 쿼리를 대체했습니다.

"s : 1 : X"는 항상 1 뒤에 오는 알파 문자 하나이므로 다른 것과는 일치하지 않습니다. 쿼리를 다음으로 변경합니다.

$ query = 'SELECT * FROM'. $ tableName. ' "%". $ regionId. '%'와 (과) 같은 허용 된 지역은 REGEXP "i : '. $ secondlastdigit.';" 또는 (skurules, char (34), 0) REGEXP "s : 1 : 0 '을 대체하십시오. $ secondlastdigit.'0;" 상태 = 1 ORDER BY id DESC LIMIT 1 ';

매우 hackish 수정하지만 지금은 바인드에서 저를 얻는다 ..

마크