2013-11-22 14 views
0

Я пытался выполнить этот запрос -Как использовать переменную Session в MySQL Query

$sql="INSERT INTO REGISTRATIONS VALUES ('$_SESSION['fname']', '$_SESSION['username']', '$_SESSION['height']', '$_SESSION['image']');"; 

И это одно, а -

$sql="INSERT INTO REGISTRATIONS VALUES ($_SESSION['fname'], $_SESSION['username'], $_SESSION['height'], $_SESSION['image']);"; 

Но оба эти возвращает ошибку. Поэтому я сохранил переменные сеанса в обычных PHP-переменных. и попытался выполнить запрос -

$name = $_SESSION['fname']; 
$username = $_SESSION['username']; 
$height = $_SESSION['height']; 
$image = $_SESSION['image']; 

$sql="INSERT INTO REGISTRATIONS VALUES ('$name', '$username', '$height', '$image');"; 

И это сработало.

Но я хочу знать, почему первые два не работали и почему мы должны сохранять сессию в другую переменную, чтобы заставить ее работать?

Пожалуйста, помогите :)

+0

Вы упомянули об ошибке? – mithunsatheesh

ответ

3

Проблема

У вас есть синтаксические ошибки в этом коде

$sql = " 
    INSERT INTO REGISTRATIONS 
    VALUES (
     '$_SESSION['fname']', 
     '$_SESSION['username']', 
     '$_SESSION['height']', 
     '$_SESSION['image']' 
    ); 
"; 

Здесь вызывается ошибка. Вы не можете обращаться к индексам массивов внутри строки без специального синтаксиса (см. Ниже).

Решение

Отдельная строка и переменные с оператором конкатенации, .

$sql = " 
    INSERT INTO REGISTRATIONS 
    VALUES ('" 
    .$_SESSION['fname']. 
    "', '" 
    .$_SESSION['username']. 
    "', '" 
    .$_SESSION['height']. 
    "','" 
    .$_SESSION['image']. 
    "');"; 

или использовать РНР variable interpolation см "комплекс (кудрявые) синтаксис". Это предпочтительный способ.

$sql = " 
    INSERT INTO REGISTRATIONS 
    VALUES (
     '{$_SESSION['fname']}', 
     '{$_SESSION['username']}', 
     '{$_SESSION['height']}', 
     '{$_SESSION['image']}' 
    ); 
"; 

Пожалуйста, обратите внимание, что это работает только на двойных кавычках.

+0

Спасибо. Хорошо объяснил. :) – omkarbhagat

2

Попробуйте эти

$sql="INSERT INTO REGISTRATIONS VALUES ('".$_SESSION['fname']."', '".$_SESSION['username']."', '".$_SESSION['height']."', '".$_SESSION['image']."')"; 
+0

Спасибо :) Я понял. – omkarbhagat

+0

Ваш прием :) –

0

вы можете использовать

echo "$_SESSION[name]"; 
echo "{$_SESSION['name']}"; 

см http://php.net/manual/en/language.types.string.php#language.types.string.parsing.simple

Если вы хотите, чтобы иметь причину, почему это было сделано так, хорошо, я не могу вам помочь. Но, как всегда: PHP старен и развился много, таким образом вводя непоследовательный синтаксис.

также проверить, как использовать ассоциативный массив в двойных кавычках

http://php.net/manual/en/language.types.array.php#language.types.array.foo-bar

http://php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

+0

Спасибо. Не совсем то, что я искал, но помог одним способом. Также спасибо за все ссылки. – omkarbhagat