2016-11-11 2 views
2

У меня есть эта проблема.PHP-переменная обрабатывается как строка

мне нужно получить от комментариев столбца в базе данных MySQL, строка, как это:

WHERE IDTable=$number 

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

Но если я пишу этот код

$where=getComment($table,$field); //I get the string i wrote above 
$number=5; //I initialize $number in my code 
$sql="SELECT * FROM table $where"; 
print "SQL: $sql"; 

я получаю это:

SELECT * FROM table WHERE IDTable=$number 

, очевидно, я хотел бы иметь в ответ:

SELECT * FROM table WHERE IDTable=5 

Как я могу это сделать ?

Благодаря

+0

Вы не показываете свою функцию getComment, но 1) номер должен быть определен, прежде чем вы сможете его использовать, и 2) он может не существовать в пределах области действия и 3) (это предположение) используя одиночные кавычки вместо двойных кавычек для создания строки WHERE. – aynber

ответ

0

Я сильно подозревают, что код у вас есть проблемы с не является такой же код, как описано выше, как указано выше, не будет производить результат вы указывали. По крайней мере, вам не хватает определения функции, которую вы вызываете, для создания указанного вывода.

Однако, что привело бы к такому результату, можно использовать одинарные кавычки вокруг строки. Какой prevents variable expansion, и вместо этого обрабатывает их как обычные строки.

Не только это, но и ваш код не в порядке. Вы не можете использовать переменную, прежде чем объявить ее, поскольку она просто еще не существует.

0

Строка, возвращаемая getComment(), не будет анализироваться, поэтому любые переменные PHP в ней ($number) будут возвращены как буквальная строка.

Я могу думать о двух вариантах -


Разрешить дополнительный параметр для getComment(), так что вы можете передать его $number

$number=5; 
$where = getComment($table,$field,$number); // returns "WHERE IDTable=5" 
$sql="SELECT * FROM table $where"; 


Не возвращайте $number из getComment() , то вы можете добавить его при создании запроса.

$where=getComment($table,$field); // returns "WHERE IDTable=" 
$number=5; 
$sql="SELECT * FROM table $where $number"; 
0

Возможно String Значение вы получили от MySQL: WHERE IDTable=$number могут быть заключены в одинарные кавычки. Рассмотрим пример ниже.

$number    = 22; 
    $str    = 'WHERE IDTable=$number'; 
    var_dump($str);  //<== YIELDS:: 'WHERE IDTable=$number' B'COS IT'S IN SINGLE QUOTES 

    $parts    = explode("=", $str); 
    list($where, $var) = $parts; 
    $var    = ltrim(trim($var), "\$"); 
    $newStr    = trim($where . "=" . $$var); 

    var_dump($$var); //<== YIELDS:: int 22 
    var_dump($newStr); //<== YIELDS:: 'WHERE IDTable=22' (length=16) 

Предполагая, что это случай с вашей строки; Чтобы обойти это, вы можете просто захотеть извлечь переменную из String, а затем перестроить String, как показывает фрагмент выше. В противном случае; если у вас есть возможность включить String в Double Quotes, это запутанное обходное решение было бы совершенно неуместным.

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