2015-12-21 2 views
-1

У меня есть PHP SQL запрос, который выглядит следующим образом:PHP SQL в операторе с условием И

$search = mysql_query("SELECT * FROM `data` WHERE (`state` IN ($userStr)) AND ('Scholarship Type' LIKE '%$stype%')") 

$ userstr представляет собой массив состояний, которые получают выбранные конечным пользователем в окошке. Эта часть работает нормально, но когда я представляю следующее условие, которое является стипендией, это не сработает.

Вот полный код:

<html> 
<head> 
<link rel="stylesheet" type="text/css" href="results.css"> 
</head> 
</html> 
<?php 

$state = $_POST['state']; 
$stype = $_POST['stype']; 


$connection = mysql_connect('198.71.225.63:3306', 'newmslsuper', 'blank'); //The Blank string is the password 
mysql_select_db('msl_data'); 

if(isset($_POST['col'])){ 
    $state1 = $_POST['col']; 
} 

$userStr = implode(',', $state1); 



$search = mysql_query("SELECT * FROM `data` WHERE (`state` IN ($userStr)) AND ('Scholarship Type' LIKE '%$stype%')"); 
$count=mysql_num_rows($search); 
if ($count==0) { 
echo 'Sorry your search returned no results. Please try again.'; 
} 
else { 

$fields_num1 = mysql_num_fields($search); 


echo "<table><tr>"; 

// printing table headers 
for($i=0; $i<$fields_num1; $i++) 
{ 
$field1 = mysql_fetch_field($search); 
echo "<th>{$field1->name}</th>"; 
} 
echo "</tr>\n"; 

// printing table rows 
while($row1 = mysql_fetch_row($search)) 
{ 
echo "<tr>"; 

// $row is array... foreach(..) puts every element 
// of $row1 to $cell1 variable 
foreach($row1 as $cell1) 
    echo "<td>$cell1</td>"; 

echo "</tr>\n"; 
} 
} 
mysql_close(); //Make sure to close out the database connection 


?> 
+2

'mysql_ *' функции устарели (и удаляются в PHP7), Я предлагаю использовать PDO как альтернативу (googling дает множество примеров того, как его использовать). Кроме того: ваш код уязвим для SQL-инъекций, либо использует подготовленные инструкции, либо выполняет надлежащую проверку данных, предоставленных пользователем (по крайней мере, избегая). – ccKep

+2

[Ваш скрипт находится под угрозой для SQL Injection Attacks.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+2

Пожалуйста, [остановите использование mysql_ * 'functions] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

1

Удалить single quotes и использовать backticks для побегspace в имени столбца

SELECT * FROM `data` 
WHERE `state` IN ($userStr) 
AND `Scholarship Type` LIKE '%$stype%' 
    --^-- Here  --^--here 
+0

Спасибо за помощь! И все великие советы - внесут изменения. –