2015-06-09 29 views
-2

我正在學習php和mysql,並且正致力於讓我的當前網站變得動態。在php中與mysql進行通信的問題

我已經看了一些指南,並在我自己的代碼上工作,對我的知識,我相信它應該工作,但是當我在網上檢查它時,它什麼都不做。

有沒有什麼明顯的我已經錯過了下面的代碼,並有反正在PHP中顯示錯誤,這將幫助我發現我做錯了什麼?

<? 
    function functions($method, $query) { 
    $con = mysql_connect("hostname","username","password"); 

    mysql_select_db("databasename", $con) or die(mysql_error()); 


    if($method = 'get') { 
     $result = mysql_query($query); 
     return $result; 
     echo $result; 
    } 

    if($method = 'send') { 
     $result = mysql_query($query); 
    } 
    } 

    $query = "SELECT * FROM 'content' where 'ID' = 1"; 

    $heading = functions('get', $query); 

?> 

<h1><?php echo $heading;?></h1> 
+0

請確保正確地發佈您的代碼。每條線的前面應該有4個空格。如果您正在複製和粘貼編輯器,只需在一行中將所有內容複製粘貼到此處即可。 – Styphon

+0

第一個問題是您正在使用折舊的'MySQL_ *'函數。你不應該再使用它們,而應該看看MySQLi或PDO。 – Styphon

+0

第二個(潛在的)問題是您正在使用PHP短標籤'<?'。這可以在'php.ini'中禁用,所以最好不要使用它,並用'<?php'替換。 –

回答

1

首先啓用錯誤報告。將這行添加到您的php標籤中作爲第一行。

error_reporting(E_ALL); 

然後避免使用短標籤。使用<?php ?>標籤。有時短標籤可能沒有啓用您的PHP配置。

檢查查詢是否返回任何內容。無論是成功還是失敗。

和比較運算符是==或===。您在函數中使用了賦值運算符(=)。你需要解決這個問題,否則什麼都不會返回。

當你echo mysql_query();它只返回資源(如果它是成功的,否則爲false)。您必須使用mysql_fetch_array()或在回顯之前從查詢中獲取數據。

最後,避免使用mysql_*擴展名。他們已被棄用。改爲使用MySQLiPDO_MySQL

0

我不確定你在問什麼,但是如果你想知道如何連接到當前的MySQL數據庫,請從此開始。

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDB"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 
0

問題是您的查詢,是的,你可以得到錯誤消息,但你需要使用錯誤檢查。你沒有檢查你的查詢是否成功。嘗試這樣的:

if (! $result = mysql_query($query)) 
{ 
    // NB: die should never be used on a live website, use only whilst building the website 
    die('ERROR['.mysql_errno().']: '.mysql_error()); 
} 

這會給你一個錯誤的查詢,因爲你在你的表和列周圍使用引號。 MySQL不會在那裏使用引號('),但會打上`。這是一個微妙但重要的區別,它們是可選的。這將很好地工作:

SELECT * FROM content WHERE ID = 1 
0

您正在使用錯誤的比較... =必須是==$method = 'get'$method = 'send'

if($method == 'get') { 
    $result = mysql_query($query); 
    return $result; 
    echo $result; 
} 

if($method == 'send') { 
    $result = mysql_query($query); 
} 

而且還使用的是PHP短標記<?。所以請檢查您的服務器上的php.ini,如果它沒有被禁用。您應該使用<?php

而正如其他人提到的,你不應該使用mysql_*,它的棄用。而不是使用MySQLiPDO

如果你想看到你的PHP錯誤,只是這一行添加到您的代碼,在開始的地方:

error_reporting(E_ALL^E_NOTICE); 

它會告訴你在你的代碼中的所有錯誤,除了通知消息,你不需要。如果您還想查看此通知消息,請將其更改爲:

error_reporting(E_ALL); 
0

有什麼明顯我在下面的代碼

你應該小心你使用的錯過=和==,因爲它們意味着不同的事情。在你上面的例子中,你已經寫了以下內容:

if($method = 'get') { 
    $result = mysql_query($query); 
    return $result; 
    echo $result; 
} 

這實際上是檢查是否轉讓($方法=「得到」)是成功的。我想你想要做的是檢查,看看是否$方法等於「得到」你會做這樣的:

if($method == 'get') { 
    $result = mysql_query($query); 
    return $result; 
    echo $result; 
} 

另一個要注意的是,你命名的函數「功能」這可能有點令人困惑。我建議你嘗試命名一些更具描述性的函數,以便將來可以更容易地找到它,隨着代碼的增長。

正如其他人已經評論你應該現在可以使用MySQLI,所以這裏也有一個鏈接。這看起來不像看起來那麼令人生畏,但現在學習要好得多。 PHP Mysqli

反正是有顯示的PHP錯誤,這將有助於我發現我做了什麼錯?

經常看到你得到的錯誤是得到你所遇到問題的好主意的唯一方法。這裏有一個很大的堆棧溢出問題,關於錯誤以及您可能沒有錯誤顯示的挫折:How to get useful error messages in PHP?

相關問題