2013-03-28 2 views
9

Я имею проблему с этой простой SQL-запрос:PHP переменная строка в ИНЕКЕ MySQL

<?php 
require_once('../../Connections/tohoshows.php'); 

$show ='gothaf'; 

mysql_select_db($database_tohoshows, $tohoshows); 
$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '"; 
$getShows = mysql_query($query_getShows, $tohoshows) or die(mysql_error()); 
$row_getShows = mysql_fetch_assoc($getShows); 
$totalRows_getShows = mysql_num_rows($getShows); 

mysql_free_result($getShows); 
?> 

Когда я использую строку непосредственно в ИНЕКЕ как этот

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='gothaf'"; 

Я получаю результат. Когда я использую переменную, я не получаю никаких данных! Я новичок, и я не могу понять, что я делаю неправильно. Любая помощь будет оценена по достоинству. Спасибо!

+2

[** Пожалуйста, не используйте 'mysql_ *' функции в новом коде **] (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. – Kermit

ответ

17

вы не получая даты, потому что у вас есть дополнительное пространство betwee котировок,

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show =' ". $show. " '"; 
                    ^HERE ^

, которые затем будут анализироваться в

SELECT * FROM toho_shows WHERE toho_shows.show =' gothaf ' 

удалить его, и он будет работать

$query_getShows = "SELECT * FROM toho_shows WHERE toho_shows.show ='". $show. "'"; 

В качестве опоры q uery уязвим с SQL Injection, если значение (s) переменных произошло извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

+0

Спасибо за ваш ответ! Я также пробовал без пробелов между ними, но я до сих пор не получаю никаких данных. –

+0

опубликуйте результат этого 'echo $ query_getShows;' –

+0

. В любом случае вы даже не должны использовать этот подход, @Akis, это очень просто использовать подготовленные операторы, и все же он критичен в системе. – Jonast92

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