2017-04-11 37 views
0

我已經做了這種類型的SELECT多次,但這次我不能得到它的工作。有什麼想法嗎?不能得到一個簡單的SELECT工作

$Name = "Dick"; 

$conn = mysqli_connect($server, $dbname, $dbpw, $dbuser); 

$sql = "SELECT id FROM table WHERE $Name = table.first_name"; 
$result = $conn->query($sql); 
$row = $result->fetch_assoc(); 
$customer_id = $row['id']; 
Database::disconnect(); 

echo "customer id = " . $customer_id; 
+1

@JohnConde:在「倒退」的部分無關緊要。 –

+0

不要忘記[啓用異常](http://stackoverflow.com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli),以便使錯誤變得可見。這裏有什麼特別的是正在進行的'Database :: disconnect()'調用,但是你已經創建了一個獨立於此的句柄。 – tadman

+0

您可能想添加到您的問題的任何錯誤日誌? – Alfabravo

回答

2

如果你確實有一個名爲table表會更適合使用回蜱周圍的名字,因爲在字TABLEreserved word in MySQL。你也應該用在你變單引號,如果它包含一個字符串:

$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 

其他可能的原因,如果查詢仍然不爲你工作:

  1. 確保您在連接參數正確的順序。它應該是:mysqli_connect($server, $dbuser, $dbpw, $dbname)
  2. 如果您希望獲得單行結果,則應該使用fetch_array()而不是fetch_assoc()
  3. 當使用mysqli_connect()而不是mysqli()時,您將PROCEDURAL STYLE與Object Oriented Style混合,同時使用面向對象的$result->樣式。你應該決定一種風格並堅持下去。

這將是您的查詢的程序風格:

$Name = "Dick"; 
$conn = mysqli_connect($server, $dbuser, $dbpw, $dbname); // NOTE THE CHANGED ORDER OF CONNECTION PARAMETERS! 
$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 
$result = mysqli_query($conn, $sql); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

$customer_id = $row['id']; // YOUR CUSTOMER ID 

mysqli_free_result($result); // FREE RESULT SET 
mysqli_close($conn); // CLOSE CONNECTION 

而且這將是面向對象的風格:

$Name = "Dick"; 
$conn = new mysqli($server, $dbuser, $dbpw, $dbname); 
$sql = "SELECT `id` FROM `table` WHERE `first_name` = '$Name'"; 
$result = $conn->query($sql); 

$row = $result->fetch_array(MYSQLI_ASSOC); 

$customer_id = $row['id']; // YOUR CUSTOMER ID 

$result->free(); // FREE RESULT SET 
$conn->close(); // CLOSE CONNECTION 

我會建議在命名錶別的東西比table,因爲這是一個保留字,可能會導致您解析問題。字段名也是一樣。更多閱讀:https://dev.mysql.com/doc/refman/5.5/en/keywords.html

更多mysqli_fetch_array()和差異程序風格和麪向對象式的使用:http://php.net/manual/en/mysqli-result.fetch-array.php

+1

謝謝大家。我錯過了明顯的。我需要在單引號中附上'$名稱'。它現在適用於PDO和mysqli,但出於安全原因,我會堅持使用PDO。謝謝! – Bricked

0

您只需Concat的像這樣的變量:

$sql = "SELECT id FROM table WHERE " . $Name . " = table.first_name"; 
+1

如果你使用雙引號,這在PHP中是不必要的。 – yarwest

+0

感謝idk很多的PHP,但這項工作爲他。 –

+0

你仍然缺少你的字符串引號('$ Name')。 –

1
$sql = "SELECT id FROM table WHERE '$Name' = table.first_name";