2015-09-20 116 views
2

我想學習在php中使用mysql。我開始嘗試在mysql中創建一個表,並使用mysqli擴展。錯誤在PHP中執行sql查詢

我的代碼:

<?php 
$truemsg = "Table created successfully"; 
$falsemsg = "Error creating table: "; 

$servername = "localhost"; 
$username = "myuser"; 
$password = "mypass"; 
$db = "mytable"; 


// Create database 
$sql = "USE ".$db.";". 
'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
userid VARCHAR(30) NOT NULL, 
password VARCHAR(30) NOT NULL, 
role VARCHAR(20) NOT NULL, 
email VARCHAR(50) 
);'; 

print "Sql command is ".$sql; 

// Create connection 
$conn = new mysqli($servername, $username, $password); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
print "<p></p>"; 
if ($conn->query($sql) === TRUE) { 
    echo $truemsg; 
} else { 
    echo $falsemsg . $conn->error; 
} 

$conn->close(); 
?> 

的錯誤是:

Sql command is USE mytable;CREATE TABLE IF NOT EXISTS Authentication (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, userid VARCHAR(30) NOT NULL, password VARCHAR(30) NOT NULL, role VARCHAR(20) NOT NULL, email VARCHAR(50)); 
Error creating table: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS Authentication (id INT(6) UNSIGNED AUTO_INCREMENT PR' at line 1 

我嘗試了mysql命令行上粘貼相同的命令,並能正常工作。在php中使用這個問題有什麼問題?

+0

多個查詢使用mysqli_multi_query http://php.net/manual/ro/mysqli.multi-query.php或刪除USE數據庫,並只是把數據庫連接 – Mihai

回答

5

您應該通過一個

$sql = "query one"; 
$conn->query($sql); 

$sql = 'query two'; 
$conn->query($sql); 

運行查詢,而不是一個在一個聲明中耦合這一切。

不要使用mysqi_multi_query()要麼,這個異步功能並不適合日常使用。

此外,在這種特殊情況下USE查詢是多餘的。數據庫應該進入的構造函數:

$conn = new mysqli($servername, $username, $password, $db); 
                 ^^^ here 

還有,告訴mysqli的本身自動拋出錯誤,而不是手動檢查每個數據庫命令的結果:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

這樣,您將得到整潔乾淨代碼:

<?php 
$servername = "localhost"; 
$username = "myuser"; 
$password = "mypass"; 
$db = "mytable"; 

// Create data table 
$sql = 'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
userid VARCHAR(30) NOT NULL, 
password VARCHAR(30) NOT NULL, 
role VARCHAR(20) NOT NULL, 
email VARCHAR(50) 
)'; 

// Create connection 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$conn = new mysqli($servername, $username, $password, $db); 

// Run a query 
$conn->query($sql); 
echo "Table created successfully"; 

此代碼將報告已成功創建表或發出錯誤,並提供有關出錯的詳細說明。

3

這似乎像一個MySQL多個查詢問題

$conn->select_db($db); 

您可以使用此功能在查詢之前使用的數據庫,並從查詢字符串中刪除使用數據庫語句,那麼您查詢字符串變成

$sql = 'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
userid VARCHAR(30) NOT NULL, 
password VARCHAR(30) NOT NULL, 
role VARCHAR(20) NOT NULL, 
email VARCHAR(50) 
)'; 

可能爲你工作..