2015-06-04 2 views
-1

Мне сложно найти ошибки в этом коде. Я пробовал много вариантов, но все еще получал ошибку в этой строке:Что здесь случилось с синтаксисом PHP?

$query= "INSERT INTO publish (name, email, title, content)" . 
    "VALUES ('$row['Name']','$row['Email']',$row['title'],$row['content'])"; 

Что может быть неправильным?

вот остальная часть кода:

<?php 


// connect to the database 
include('config2.php'); 

// check if the 'id' variable is set in URL, and check that it is valid 
if (isset($_GET['id']) && is_numeric($_GET['id'])) 
{ 
// get id value 
$id = $_GET['id']; 

$dbc = mysqli_connect('localhost', 'x', 'x', 'x') 
    or die('Error'); 

    $name = $row['Name']; 
    $email = $row['Email']; 
    $title = $row['title']; 
    $content = $row['content']; 


    $result = mysql_query("select *stories WHERE id=$id") 
      or die(mysql_error()); 

    $row = mysql_fetch_array($result); 
    $query= "INSERT INTO publish (name, email, title, content)" . 
    "VALUES ('$row['Name']','$row['Email']',$row['title'],$row['content'])"; 

    or die('Error querying database.'); 

    mysqli_close($dbc); 

} 

?> 

Сообщение об ошибке: "разобрать идентификатор ошибки ожидает (t_string) 'или переменную (t_variable)' или номер (t_num_string)«

+0

Было бы здорово, если бы вы могли показать остальную часть кода вокруг этой строки ... например, что такое '$ row' ....? – Darren

+0

не уверен, но постарайтесь добавить пробел перед VALUES –

+0

и что сообщение об ошибке? –

ответ

4

Возможно, вы хотите использовать сложный синтаксис строк для правильной интерполяции этих переменных. Например:

$query= "INSERT INTO publish (name, email, title, content)" . 
"VALUES ('{$row['Name']}','{$row['Email']}',{$row['title']},{$row['content']})"; 

Хотя это только исправит одну из проблем с кодом.

Обратите внимание, есть много других способов решить этот тоже, например конкатенации вместо интерполяции или строки замены, и т.д. и т.п.

Она также может быть стоит почитать documentation на струнах в какой-то момент.

+0

Спасибо, что решили ошибки разбора. Вы правы, INSERT не работает Я изменил его на этот '$ query = mysql_query (« INSERT INTO publish (имя, адрес электронной почты, заголовок, контент) ». « VALUES ('{$ row [' Name ']}', '{$ row [' Email ']}', {$ row ['title']}, {$ row ['content']}) ", но все еще не работает – vyt45

+0

@ vyt45 Вероятно, вы жалуетесь, что, есть цитаты вокруг значений для заголовка и контента, которые вы делаете для имени и электронной почты. –

+0

Спасибо за вашу помощь. Я сделал это, все еще ничего не получая в таблице, не знаю, где могла быть проблема. – vyt45

0

Вы забыли "" между вашими переменными и вашими строками. Например:

$query= "INSERT INTO publish (name, email, title, content)" . 
    "VALUES (".$row['Name'].','.$row['Email'].','.$row['title'].','.$row['content'].")"; 

Однако, похоже, что у вас могут возникнуть дополнительные проблемы с фактическим SQL-запросом.

+1

Этот SQL имеет синтаксические ошибки. – chris85

+0

@ chris85 Просто пытаюсь ответить на вопрос OP относительно ошибки PHP. Проблемы SQL могут быть рассмотрены в отдельном вопросе, если OP хочет спросить. – kittykittybangbang

+0

Ага, я не заметил, что OP добавил там фактическое сообщение об ошибке. Справедливо. Может быть, стоит отметить в вашем ответе, что есть много других причин, по которым их код не будет выполняться, как ожидалось. – chris85

0

Лучшей практикой в ​​PHP является использование одиночной кавычки ' для строк. Cos PHP ищет переменные в двойных кавычках и продолжает обнюхивать, есть ли переменная (или несколько переменных) внутри строки.

Так например: «Очень длинная строка ... $ var1 .. long string .. $ var2 string» это будет работать медленнее по сравнению с «Очень длинная строка ...». $ var1. '.. длинная строка ..'. $ var2. 'string'; потому что, когда PHP видит одиночную цитату, он не будет нюхать для переменных внутри, поэтому он быстрее.

Из моего опыта, в моем раннем возрасте, я работал над очень большим сценарием php и везде использовал двойные кавычки. После вышеупомянутого объяснения эксперта я преобразовал весь сценарий в одинарную цитату, и производительность была намного лучше.

Так что для вашей ситуации я бы предложил и попросил использовать одинарные кавычки, и это также позволит избежать путаницы. Также полезно использовать mysql_real_escape_string(), чтобы избежать SQL Injection.

$query= 'INSERT INTO publish (name, email, title, content) 
VALUES (
\'' . mysql_real_escape_string ($row['Name']) . '\', 
\'' . mysql_real_escape_string ($row['Email']) . '\', 
\'' . mysql_real_escape_string ($row['title']) . '\', 
\'' . mysql_real_escape_string ($row['content']) . '\')'; 
+1

Использование двойных и одиночных кавычек (в основном) делает незначительную разницу в производительности до такой степени, что вы, вероятно, не заметите его. Особенно там, где задействованы подключения к другим службам, это почти никогда не будет узкое место. –

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