2014-07-16 4 views
0

сообщение об ошибке я уже ПОЛУЧАТЬНе удается найти SQL ошибку в PHP

Parse error: syntax error, unexpected 'INTO' (T_STRING) in D:\ServerFolders\Web\tokens\insert.php on line 17

Line 17

$sql= INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 

Полный код

<?php 
//Connect to DB 
$con=mysql_connect(localhost,root, "",APROJECT) or die (mysql_error()); 
// Check connection 
if (mysql_connect_errno()) { 
echo "Failed to connect to MySQL: " . mysql_connect_error(); 
} 

// escape variables for security 
$Forename = mysql_real_escape_string($con, $_POST['Forename']); 
$Surname = mysql_real_escape_string($con, $_POST['Surname']); 
$Email = mysql_real_escape_string($con, $_POST['Email']); 
$Username = mysql_real_escape_string($con, $_POST['Username']); 
$Password = mysql_real_escape_string($con, $_POST['Password']); 
$DOB = mysql_real_escape_string($con, $_POST['DOB']); 
//SQL query to add data to DB 
$sql= INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
VALUES ($Forename, $Surname, $Email, $Username, $Password, $DOB); 

if (!mysql_query($con,$sql)) { 
    die('Error: ' . mysql_error($con)); 
} 
echo "1 record added"; 

mysql_close($con); 
?> 

ответ

0

Прежде всего, mysql_ * больше не поддерживается и рекомендуется использовать PDO или mysqli_ *.

Вы должны поместить запрос в кавычки;

$sql= "INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
VALUES ($Forename, $Surname, $Email, $Username, $Password, $DOB)"; 

Возможно, это не сработает! Потому что вы должны поместить значения в одинарные кавычки. Поэтому лучший подход - использовать параметризованный запрос.

За это время я предлагаю использовать функцию sprintf().

$sql= sprintf("INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", $Forename, $Surname, $Email, $Username, $Password, $DOB); 
+0

Не использовал функцию sprintf(). Первый ответ избавился от этого сообщения об ошибке, все еще сражающегося с остальными, но я знаю, как с ними бороться. Также обменялся всеми mysql_ * на mysqli_ *. –

0

Попробуйте добавить котировки

$sql= "INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
VALUES ($Forename, $Surname, $Email, $Username, $Password, $DOB)"; 
0
$sql= INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
VALUES ($Forename, $Surname, $Email, $Username, $Password, $DOB); 

выше строка должна быть строка и в одной строке (переменные в строках, которые начинаются и заканчиваются в " можно сразу же записать в него):

$sql = "INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) VALUES ($Forename, $Surname, $Email, $Username, $Password, $DOB)"; 

Если вы хотите он должен быть в нескольких строках для лучшей читаемости, вы можете использовать синтаксис nowdoc с переменными, встроенными в {}:

$sql <<<'EOD' 
    INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) 
    VALUES ({$Forename}, {$Surname}, {$Email}, {$Username}, {$Password}, {$DOB}) 
EOD; 

Последний подход будет Concat строку с .:

$sql = "INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) " . 
     "VALUES (" . $Forename . ", " . $Surname . ", " . $Email . ", " . $Username . ", " . $Password . ", " . $DOB . ")"; 

Смотрите эту ссылку: http://php.net/manual/de/language.types.string.php

На стороне записки, не забудьте, чтобы избежать ваши переменные в MySQL Query с mysql_real_escape_string для предотвращения SQL Инъекции!

$sql = "INSERT INTO users(Forename, Surname, Email, Username, Password, DOB) " . 
     "VALUES (" . mysql_real_escape_string($Forename) . ", " . mysql_real_escape_string($Surname) . ", " . mysql_real_escape_string($Email) . ", " . mysql_real_escape_string($Username) . ", " . mysql_real_escape_string($Password) . ", " . mysql_real_escape_string($DOB) . ")"; 
0

Похоже, вы просто пропустили какую-то цитату вокруг своего запроса sql.

Что-то вроде

$sql= "INSERT INTO `users`(`Forename`, `Surname`, `Email`, `Username`, `Password`, `DOB`) 
VALUES (".$Forename.", ".$Surname.", ".$Email.", ".$Username.", ".$Password.", ".$DOB.")"; 

Если исправить ошибку.

Это также ничего не стоит, что mysql_query обесценивается и может быть довольно небезопасным. Возможно, стоит посмотреть на преднастроенные заявления PDO, если это то, что будет использоваться в производстве. Выезд http://php.net/manual/en/ref.pdo-mysql.php и Dream in Code PDO

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