0
我有一個關於共享連接的問題。我已經嘗試了很多個星期來解決這個問題,並且嘗試了很多不同的方法,比如PDO連接,getConnetion等等。但我仍然沒有得到它的工作。我想要做的是創建一個連接到我的數據庫ONCE然後不必再聲明它。在PHPUnit中,你有我熟悉的setUp和tearDown函數。基本上我想在setUp中聲明數據庫連接,以便在每次測試之前都會有一個連接到執行單元測試所需的數據庫。目前,我不得不在每個函數中聲明一個到數據庫的新連接以使其工作。否則,我會收到錯誤消息,指出每個函數都有一個「未定義的變量$ mysqli」,或者它可能會說「調用非成員函數的成員函數query()」。這是我的代碼:功能之間的共享連接
<?php
include 'functions.php';
class Test extends PHPUnit_Framework_TestCase {
protected function setUp(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
public function testCheckbrute(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
$LessThanFive = checkbrute('200', $mysqli);
$this->assertFalse($LessThanFive);
$FiveFailedLogins = checkbrute('201', $mysqli);
$this->assertTrue($FiveFailedLogins);
}
public function testLogin(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
$AccountIsLockedFalse = Login("xxxx","xxxx", $mysqli);
$this->assertFalse($AccountIsLockedFalse);
$NoUserExists = Login("xxxx","xxxxx", $mysqli);
$this->assertFalse($NoUserExists);
}
protected function tearDown(){
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
$mysqli->query("DELETE FROM login_attempts WHERE user_id IN (200, 201)");
$mysqli->query("DELETE FROM members WHERE id IN (200, 201)");
}
}
?>
任何具體的簡單的解決方案,不需要太多的重構或時間?這是代碼片段,我不希望每個函數內繼續寫:
$mysqli = new mysqli('localhost', 'usrname', 'password', 'db');
我試過了,並拿走了每個函數中的數據庫聲明,但是我收到一條錯誤消息:「調用一個非對象的成員函數query()」,它抱怨我的tearDown函數。我在tearDown函數中添加了全局的$ mysqli和聲明,然後得到了我通常得到的exakt相同的錯誤消息:「Undefined variable mysqli」在我的測試函數中。或者你的意思是我還需要在每個函數中添加:global $ mysqli? – user2402851
您是否嘗試過打印每個'var'以確保它們不是空的? – Brian
當我嘗試回顯$ mysqli時,它說:「mysqli類的對象無法轉換爲字符串」 – user2402851