2014-03-04 5 views
0

데이터가있는 Array가 있고 데이터를 루핑하고 있습니다.PHP가 데이터베이스에 문자열이 포함되어 있는지 확인하십시오.

각 문자열에 대해 데이터베이스 (전체 테이블)에 있는지 확인하고 싶습니다. 그것은 다른 문자열 안에있을 수 있습니다 (그래서 테이블에 heyredcat이 있고 빨간색을 확인하면 true를 반환합니다).

이 샘플 스크립트를 만들었지 만 MySQL 쿼리가 나오지 않아 인터넷 검색 결과 "전체 문자열과 같으면"좋은 결과를 얻었지만 전체 테이블의 문자열은 아닙니다.

<?php 
$colors = array("red","green","blue","yellow"); 
foreach ($colors as $value) 
    { 
     $result = mysql_query("SELECT * FROM products where $value ...... ") or die(mysql_error()); 
     if($result){ 
     echo "Color" .$value. "is present"; 
     else { 
     echo "Color" .$value. "is not present"; 
     } 
    } 
?> 

어떤 MySQL 쿼리를 사용해야합니까? 또한, 나는 이것을 할 효율적인 방법인가? (시간이 많이 소요됨)

+0

tssss bad 편집. 어쨌든, 내 전체 데이터베이스 검색 스크립트가 다른 사람을 도울 수 있기를 바랍니다. 너! –

답변

3

이 쿼리는 같이 할 수있는 것입니다 : 색상의 목록은 사용자에 의해 포착 될 수있는 경우이 SQL 인젝션에 취약 것을

$res = mysql_query("SELECT 1 FROM `products` WHERE 
    `col1` LIKE '%" . $value . "%' 
    OR `col2` LIKE '%" . $value . "%' 
    OR `col3` LIKE '%" . $value . "%' 
    .. etc 
"); 
$num = mysql_num_rows($res); 
if ($num === 0) { // not found 

그러나는 점에 유의하십시오.

그래서 당신은하고 싶은 것 :

$value = mysql_real_escape_string($value); 
mysql_query("SELECT 1 FROM `products` WHERE 
    `col1` LIKE '%" . $value . "%' 
    OR `col2` LIKE '%" . $value . "%' 
    OR `col3` LIKE '%" . $value . "%' 
    .. etc 
"); 

당신 동적으로 MySQL의 스키마를보고 열 이름을 생성 할 수 있습니다. 현명한 방법은 SELECT * FROM table LIMIT 1을 먼저 수행하여 모든 열 이름을 가져 오는 것입니다.


더 나은 쿼리에 매개 변수를 삽입하는 더 나은 (덜 오류가 발생하기 쉬운) 방법이있는 PDO 드라이버를 사용하는 것입니다.

+0

답변 해 주셔서 감사합니다 (& 편집). 그것은 훌륭합니다, 당신이 real_escape에 대해 언급 한 것이 좋았습니다. 나는 거의 잊었습니다.유일한 방법은 메서드가 열을 필요로하고 전체 테이블을 검색하는 것을 선호한다는 것입니다. – Mdlc

+0

"각 문자열에 대해 데이터베이스에 전체 데이터베이스가 있는지 확인하고 싶습니다." –

+0

나는 전체 데이터베이스 btw 대신에 테이블을 의미했지만 (바로 편집하겠습니다), 사실상 @Loic이 답변에는이 문제가 포함되지 않습니다. – Mdlc

0

또한 루프 할 데이터베이스의 모든 테이블 목록과 쿼리 할 모든 테이블의 모든 열이 필요합니다. 데이터베이스의 모든 테이블에있는 모든 열을 쿼리 할 수있는 쿼리를 인식하지 못했습니다. 어쩌면 당신은 mysqldump와 grep을 사용하는 편이 낫겠습니까?

+0

information_schema가 키입니다. –

2

전체 데이터베이스를 검사하려면 잘못 처리해야합니다.

여기에 그것을 수행하는 방법에 대한 주요 라인은 다음과 같습니다

먼저 모든 데이터베이스 테이블과 열을 수집 :

Select table_schema, table_name, column_name from information_schema.COLUMNS where table_schema=[your_db_name] and table_name=[your_table_name] 

당신은 전체 데이터베이스 서버의 열을 얻었다.

이제 각 열에 대해 문자열과 같은지 확인해야합니다. 나는 모든 재미를 가지고 가지 않을 것이다, D

그리고 당신은 당신의 덤프에 TABLE_SCHEMA, TABLE_NAME 및 COLUMN_NAME을 추가 할 수 있습니다 : 모든 DB는 지연에 대한

<?php 
while ($row = mysqli_fetch_array($result)){ 
    mysqli_select_db($row['table_schema']); 
    $res = mysqli_query('select * from '.$row['table_name'].' where '.$row['column_name'].' like "%'.$your_string.'%"'); 
    while($res_line = mysqli_fetch_array($res)){ 
     var_dump($res_line); 
    } 
} 

?> 

아, 내가 책임을지지 않습니다 해요 몇 가지 있습니다.

+0

답장을 보내 주셔서 감사합니다. 특히 전체 테이블을 검색하라는 요청을 통합했습니다. – Mdlc

+0

이 필요합니다. –

관련 문제