2015-06-04 39 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(name,email,title,content」)。 「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錯誤的問題。如果OP希望提出問題,可以在單獨的問題中解決SQL問題。 – 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

使用雙引號和單引號(主要是)對性能的影響可以忽略不計,特別是在涉及到與其他服務的連接時,它幾乎不會是一個瓶頸。 –