2016-09-14 3 views
0

LIKE를 사용하여 조각을 조회하는 MySQL 쿼리를 실행하려고합니다.배열을 사용하여 동적 MySQL 쿼리 만들기 - PHP

테이블 구조 : TableExample

id name  piece 
0  jon  piece0 
1  james piece3 
2  sarah piece6 

의 I 지금까지 가지고 냈다 :

$pieces = "piece0 piece1"; //variable 
$piecearrayexplode = explode(" ", $pieces); 
$piece0 = $piecearrayexplode[0]; 
$piece1 = $piecearrayexplode[1]; 

$sql = "SELECT * FROM TableExample WHERE piece LIKE '%$piece0%' OR pieces LIKE '%$piece1%'"; 

내가 가진 문제는 $ 개 변수임을 내가 자동으로 동적으로 $ SQL을 필요로하고 올바른 수의 LIKE 문을 특징으로합니다.

예. $ pieces = "piece0 piece1 piece2"이라면 $ SQL을 다음과 같이 입력하십시오 :

$sql = "SELECT * FROM TableExample WHERE piece LIKE '%$piecearrayexplode[0]%' OR pieces LIKE '%$piecearrayexplode[1]%' OR pieces LIKE '%$piecearrayexplode[2]%'"; 

참고 : $ pieces는 항상 공백으로 구분됩니다.

단어 수를 계산할 수 있습니다.

$count = str_word_count($pieces); 

나는 어디에서부터 갈지 모른다.

나는 좋아하는 연속과 같은 1이 아닌 하나의 문이기 때문에 내가 무엇을 찾고 될 것 같지 않습니다이 Create a dynamic mysql query using php variables

보고했다. 내가 여기서 뭔가를 놓치고 있니?

$foo = '... list of pieces ...'; 
$parts = explode(' ', $foo); 

$likes = array(); 
foreach($parts as $part) { 
    $likes[] = "piece LIKE '%$part%'"; 
} 

$sql = "SELECT ... WHERE " . implode(' or ', $likes); 

을하지만이 sql injection attacks에 취약 참고 :

답변

1

그래서 동적으로 너무 쿼리를 작성합니다.

0

배열을 던져서 조각을 하나씩 추가하여 쿼리 할 수 ​​있습니다. (테스트되지 않음)

$pieces = "piece0 piece1 piece2"; 
$piecesArr = explode(" ", $pieces); 

$sql = "SELECT * FROM TableExample WHERE piece LIKE"; 

$first = true; 
foreach ($piecesArr as $PA) { 
    if ($first) { 
    $sql .= " '%$PA%'"; 
    $first = !$first; 
    } 
    else $sql .= " OR pieces LIKE '%$PA%'"`; 
} 
0

기본적으로 뷰에서 결과를 동적으로 생성했습니다. 그런 다음 뷰의 열 이름 값을 갖는 드롭 다운을 채운 다음 해당 변수를 뷰의 select 문에 전달합니다.

<?php 

error_reporting(0); 
# FileName="Connection_php_mysql.htm" 
# Type="MYSQL" 
# HTTP="true" 
$hostname_connection = "localhost"; 
$database_connection = "xxx"; 
$username_connection = "root"; 
$password_connection = ""; 
$connect = mysql_pconnect($hostname_connection, $username_connection, $password_connection) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database_connection,$connect); 

$col1=$_POST['col1']; 
$col2=$_POST['col2']; 
$col3=$_POST['col3']; 

$result = mysql_query("SELECT $col1 as column1,$col2 as column2,$col3 as colmun3 FROM variety_view"); 

if(!$result){ 
echo "failed"; 
} else { 
echo "Perfecto"; 

} 

echo "<table>"; // start a table tag in the HTML 

while($row = mysql_fetch_array($result)){ //Creates a loop to loop through results 
echo "<tr> 
<td>" . $row['column1'] . "</td> 
<td>" . $row['column2'] . "</td> 
<td>" . $row['colmun3'] . "</td> 
</tr>"; //$row['index'] the index here is a field name 
} 

echo "</table>"; //Close the table in HTML 

?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 

<form method="Post" action=""> 
<select name="col1"> 
<option value="official_name">Variety Name</option> 
<option value="localname">Local name</option> 
<option value="country">Country</option> 
<option value="pedigree">Pedigree</option> 
</select> &nbsp; 
<select name="col2"> 
<option value="official_name">Variety Name</option> 
<option value="localname">Local name</option> 
<option value="country">Country</option> 
<option value="pedigree">Pedigree</option> 
</select> &nbsp; &nbsp; 
<select name="col3"> 
<option value="official_name">Variety Name</option> 
<option value="localname">Local name</option> 
<option value="country">Country</option> 
<option value="pedigree">Pedigree</option> 
</select> <br /> 

<input type="submit" value="Search" /> 

</form> 
</body> 
</html>