2014-02-23 96 views
0

首先,我是PHP新手,這是我在stackoverflow上的第一篇文章。 我正在嘗試使用mysqli_connect()將記錄寫入測試數據庫中的用戶表。 在MySQL客戶端,我可以用命令添加一條記錄:PHP mysqli()不工作

INSERT INTO users VALUES ('id' , 'smith' , 'joe' , 'joepass');

至於我能理解,下面的PHP頁面應該增加張三的用戶表,當它在瀏覽器中被擊中:

<?php 
echo "php start"; 

$con = mysqli_connect("localhost" , "root" , "rootpass" , "db_name"); 

// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

mysqli_query($con , "INSERT INTO users values ('id' , 'smith' , 'joe' , 'joepass')"); 

mysqli_close($con); 

echo "php end"; 
?> 

但是,當我去這個頁面在瀏覽器中,我看到的是文本「PHP開始」,這是第一個echo語句。我希望看到「php結束」這個詞。當我在mysql客戶端中檢查用戶表時,我看不到任何新記錄。當我用php -a打開php交互式shell並運行命令mysqli_connect();時,響應是PHP Fatal error: Call to undefined function mysql_connect() in php shell code on line 1

這使我相信mysqli_connect沒有在php.ini中正確安裝或配置,但我沒有足夠的理解php.ini來排除故障。另外,我有一個phpinfo()test.php頁面。在 「信用」 的phpinfo表(),我看到了下面幾行:

MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter 
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel 
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlueter 
MySQL Zeev Suraski, Zak Greant, Georg Richter, Andrey Hristov 

對此Ubuntu的服務器上安裝了PHP,Apache和MySQL,我已經運行的命令是:

sudo apt-get install apache2 
sudo apt-get install php5 
sudo apt-get install mysql-server 
sudo apt-get install mysql-client 
sudo apt-get install php5-cli 

我唯一能記得的額外配置是在apache2/mods-available/dir.confDirectoryIndex中添加幾個文件名以自動打開某些文件名。

是否有任何mysqli配置需要在功能使用之前完成?

此外,這是一個AWS服務器,但我不明白怎麼可能有任何網絡問題的「localhost」 ...:P

我也將包括在/etc/php5目錄grep -r 'mysqli'輸出:

php5 grep -r 'mysqli' 
apache2/php.ini:; http://php.net/mysqli.max-persistent 
apache2/php.ini:mysqli.max_persistent = -1 
apache2/php.ini:; http://php.net/mysqli.allow_local_infile 
apache2/php.ini:;mysqli.allow_local_infile = On 
apache2/php.ini:; http://php.net/mysqli.allow-persistent 
apache2/php.ini:mysqli.allow_persistent = On 
apache2/php.ini:; http://php.net/mysqli.max-links 
apache2/php.ini:mysqli.max_links = -1 
apache2/php.ini:; http://php.net/mysqli.cache_size 
apache2/php.ini:mysqli.cache_size = 2000 
apache2/php.ini:; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 
apache2/php.ini:; http://php.net/mysqli.default-port 
apache2/php.ini:mysqli.default_port = 3306 
apache2/php.ini:; http://php.net/mysqli.default-socket 
apache2/php.ini:mysqli.default_socket = 
apache2/php.ini:; http://php.net/mysqli.default-host 
apache2/php.ini:mysqli.default_host = 
apache2/php.ini:; http://php.net/mysqli.default-user 
apache2/php.ini:mysqli.default_user = 
apache2/php.ini:; Default password for mysqli_connect() (doesn't apply in safe mode). 
apache2/php.ini:; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 
apache2/php.ini:; http://php.net/mysqli.default-pw 
apache2/php.ini:mysqli.default_pw = 
apache2/php.ini:mysqli.reconnect = Off 
cli/php.ini:; http://php.net/mysqli.max-persistent 
cli/php.ini:mysqli.max_persistent = -1 
cli/php.ini:; http://php.net/mysqli.allow_local_infile 
cli/php.ini:;mysqli.allow_local_infile = On 
cli/php.ini:; http://php.net/mysqli.allow-persistent 
cli/php.ini:mysqli.allow_persistent = On 
cli/php.ini:; http://php.net/mysqli.max-links 
cli/php.ini:mysqli.max_links = -1 
cli/php.ini:; http://php.net/mysqli.cache_size 
cli/php.ini:mysqli.cache_size = 2000 
cli/php.ini:; Default port number for mysqli_connect(). If unset, mysqli_connect() will use 
cli/php.ini:; http://php.net/mysqli.default-port 
cli/php.ini:mysqli.default_port = 3306 
cli/php.ini:; http://php.net/mysqli.default-socket 
cli/php.ini:mysqli.default_socket = 
cli/php.ini:; http://php.net/mysqli.default-host 
cli/php.ini:mysqli.default_host = 
cli/php.ini:; http://php.net/mysqli.default-user 
cli/php.ini:mysqli.default_user = 
cli/php.ini:; Default password for mysqli_connect() (doesn't apply in safe mode). 
cli/php.ini:; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") 
cli/php.ini:; http://php.net/mysqli.default-pw 
cli/php.ini:mysqli.default_pw = 
cli/php.ini:mysqli.reconnect = Off 
+0

第一步:[啓用錯誤報告](http://stackoverflow.com/a/6575502/1438393)。 –

+0

現在我打的php頁面是: '致命錯誤:調用未定義的函數mysqli_connect()在/var/www/php-mysql/insert_user.php第5行' – austinheiman

回答

1

phpinfo()的mysqli部分如何?有一個嗎?我懷疑你需要安裝php5-mysql包裝。我看到這個安裝包時:

~$ cat /etc/php5/conf.d/mysqli.ini 
; configuration for php MySQL module 
extension=mysqli.so 
+0

php.ini有一個'[MySQLi]'部分和其中的所有設置在讀完它們之後似乎是有意義的。它的簡單的東西,如默認端口和最大超時時間。 – austinheiman

+1

'sudo apt-get install php5-mysql'安裝了一個新的軟件包。重啓後,點擊PHP頁面添加記錄! 非常感謝! – austinheiman