在PHP中运行某个方法时出错。我调查了它,似乎我需要 mysqlnd 驱动程序。我知道我必须在php.ini文件中配置它,但由于我与GoDaddy共享托管,我无法访问ini文件。我打电话给GoDaddy他们基本上说,你必须创建自己的。我的问题是,ini文件放在我的情况下在哪里?我需要创建 php.ini 文件或 php5.ini 吗?另外,我如何在文件中编写设置,我从未使用过ini文件,而且我真的不知道它的外观。
DB_Functions.php代码:
<?php
class DB_Functions {
private $con;
function __construct() {
require_once 'DB_Connect.php';
$db = new DB_Connect();
$this->con = $db->connect();
}
function __destruct() {
}
public function storeUser($name, $email, $password) {
$uuid = uniqid('', true);
$hash = $this->hashSSHA($password);
$encrypted_password = $hash['encrypted'];
$salt = $hash['salt'];
$stmt = $this->con->prepare("INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES(?, ?, ?, ?, ?, NOW())");
$stmt->bind_param('sssss', $uuid, $name, $email, $encrypted_password, $salt);
$result = $stmt->execute();
$stmt->close();
if ($result) {
$stmt = $this->con->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
return $user;
} else {
return false;
}
}
public function getUserByEmailAndPassword($email, $password) {
$stmt = $this->con->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
if ($stmt->execute()) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
$salt = $user['salt'];
$encrypted_password = $user['encrypted_password'];
$hash = $this->checkhashSSHA($salt, $password);
if ($encrypted_password == $hash) {
return $user;
}
} else {
return NULL;
}
}
public function getUserByNameAndPassword($name, $password) {
$stmt = $this->con->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param('s', $name);
if ($stmt->execute()) {
$user = $stmt->get_result()->fetch_assoc();
$stmt->close();
$salt = $user['salt'];
$encrypted_password = $user['encrypted_password'];
$hash = $this->checkhashSSHA($salt, $password);
if ($encrypted_password == $hash) {
return $user;
}
} else {
return NULL;
}
}
public function doesUserEmailExist($email) {
$stmt = $this->con->prepare("SELECT email FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->close();
return true;
} else {
$stmt->close();
return false;
}
}
public function doesUserNameExist($name) {
$stmt = $this->con->prepare("SELECT name FROM users WHERE name = ?");
$stmt->bind_param('s', $name);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->close();
return true;
} else {
$stmt->close();
return false;
}
}
public function hashSSHA($password) {
$salt = sha1(rand());
$salt = substr($salt, 0, 10);
$encrypted = base64_encode(sha1($password . $salt, true) . $salt);
$hash = array('salt' => $salt, 'encrypted' => $encrypted);
return $hash;
}
public function checkhashSSHA($salt, $password) {
$hash = base64_encode(sha1($password . $salt, true) . $salt);
return $hash;
}
}
?>
我在使用相同代码的两行上收到错误。
$user = $stmt->get_result()->fetch_assoc();
答案 0 :(得分:0)
php.ini
的位置取决于您拥有的托管帐户的类型。据GoDaddy说:
有关详细信息,请参阅https://www.godaddy.com/help/what-filename-does-my-php-initialization-file-need-to-use-8913。
如果GoDaddy尚未编译和安装mysqlnd
,则您很可能无法通过拥有本地php.ini
文件来解决任何问题。您可以通过创建包含以下内容的小型PHP文件(例如test.php
)来查看安装的模块:
<?php phpinfo(); ?>
将它放在HTML docroot中,在浏览器中加载文件的URL,它会告诉你哪些PHP模块可用。
如果mysqlnd
实际可用,则可以使用本地php.ini
文件配置一些(不是很多)选项。见这里:http://php.net/manual/en/mysqlnd.config.php
答案 1 :(得分:0)
你可以像这样创建php.ini文件:
如果你是一个Windows用户启动一个新的空白记事本文件写一些东西 并'保存为'php.ini
如果你是一个mac用户,启动文本编辑写一些东西转到“格式”菜单然后选择“make plain text”然后保存为'php.ini
典型内容如下所示:
display_errors = Off error_reporting = 0
在您的情况下,您可能需要根据确切的错误消息设置路径。 你得到的错误信息是什么?
mysql.default_socket =“/ your / path / to / mysql.sock”
保存更改并上传到您的网站根目录,例如的public_html
替换:
$user = $stmt->get_result()->fetch_assoc();
使用:
$stmt->bind_result();
$user = $stmt->fetch();
答案 2 :(得分:0)
如果是这样,你必须确保你确实拥有&#34; mysqlnd &#34;的启用下, 通过构建php信息页面enter link description here来了解这一点的最简单方法应该是:enter image description here
来自Godaddy Cpanel,请确保您使用的是最新的php版本。 从那里&#34; php Extensions&#34;确保启用&#34; -mysqlnd&amp; -nd_mysql&amp; -nd_mysqli&amp; -nd_pdo_mysql&#34;
这样你就可以摆脱致命的错误,你的脚本应该可以正常工作!