我有一個PHP上傳類,它有各種函數用於檢查文件並確保它符合正確的規範。不過,我有一個功能,剝離文件的名稱,並給它一個新的名字,這是一個數字。在這個函數中,我包含了我的連接,包括開始與數據庫的連接。爲了防止給兩個文件相同的名稱,我有我的數據庫中的表,其中保存了當前計數,它引用了最後一個圖像編號。當我上傳圖片時,它會從數據庫中提取計數並添加一個,並將該數字作爲圖片的名稱進行存儲。然後,我再次通過查詢數據庫來更新新計數表。這工作正常但是當我查詢另一個函數中的數據庫輸入文件的路徑時,它告訴我我的連接變量沒有聲明。我已經發布了下面的連接代碼以及我所調用的兩個函數。我很好奇,如果我沒有在正確的地方開始連接。我已經嘗試釋放結果並在調用該函數後關閉連接,然後在另一個函數中再次打開連接以提交文件路徑,但似乎也不起作用。我知道他們是關於一次打開一個連接的規則,但我儘管可以在該連接內多次查詢數據庫。在一個類中的兩個不同函數中查詢MySQL數據庫兩次
連接包括
// Create a database connection
$dbhost = "localhost";
$dbuser = "user";
$dbpass = "password";
$dbname = "new_db";
$connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Test if connection occured.
if(mysqli_connect_errno()) {
die("Database connection failed: " .
mysqli_connect_error() .
" (" . mysqli_connect_errno() . ")"
);
}
第一功能
//replaces the filename with an incremented number
public function trim_filename() {
require_once('includes/connection.php');
$query = "SELECT * FROM image_count ";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Database query failed. ");
}
$row = mysqli_fetch_assoc($result);
$count = 1 + $row["name"];
mysqli_free_result($result);
$query = "UPDATE image_count SET name = '{$count}' WHERE count = 1";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Database query failed. ");
}
$file = $_FILES['image']['name'];
$file = explode(".", $file);
$file = end($file);
$file = $count . "." . $file;
$_FILES['image']['name'] = $file;
$this->final_check();
mysqli_free_result($result);
mysqli_close($connection);
}
二級功能
public function database_query($in_path) {
$query = "INSERT INTO course (";
$query .= " course_name ";
$query .= ") VALUES (";
$query .= " '{$in_path}'";
$query .= ")";
$result = mysqli_query($connection, $query);
if (!$result) {
die("Database query failed. ");
}
mysqli_free_result($result);
mysqli_close($connection);
}
感謝您的回答,非常好的解釋! Michael Berkowski – Tyler 2015-02-08 18:48:15
@Tyler很高興幫助,祝你好運。 – 2015-02-08 18:54:21