我正在将我的站点从 MySQL 转换为 MySQLi,这对我来说并不简单,因为我从未在 MySQLi 中编写任何代码,当每个用户登录时他都会获得一个唯一的访问 token ,我需要将此代码转换为 mysqli
<?php
include('config.php');
mysql_query("CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`points` int(20) NOT NULL,
`refer` int(11) NOT NULL,
`user_id` varchar(32) NOT NULL,
`access_token` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
");
$row = null;
$result = mysql_query("
SELECT
*
FROM
users
WHERE
user_id = '" . mysql_real_escape_string($id) . "'
");
if($result){
$row = mysql_fetch_array($result, MYSQL_ASSOC);
if(mysql_num_rows($result) > 1){
mysql_query("
DELETE FROM
users
WHERE
user_id='" . mysql_real_escape_string($id) . "' AND
id != '" . $row['id'] . "'
");
}
}
if(!$row){
$insertpoint=200;
$refer=0;
mysql_query(
"INSERT INTO
users
SET
`user_id` = '" . mysql_real_escape_string($id) . "',
`points` = '" . mysql_real_escape_string($insertpoint) . "',
`refer` = '" . mysql_real_escape_string($refer) . "',
`access_token` = '" . mysql_real_escape_string($token) . "'
");
} else {
mysql_query(
"UPDATE
users
SET
`access_token` = '" . mysql_real_escape_string($token) . "'
WHERE
`id` = " . $row['id'] . "
");
}
?>
目前我在:
<?php
include('config.php');
$create_table =
'CREATE TABLE IF NOT EXISTS Data
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`points` int(20) NOT NULL,
`refer` int(11) NOT NULL,
`user_id` varchar(32) NOT NULL,
`access_token` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)';
$create_tbl = $db->query($create_table);
$sql = <<<SQL
SELECT *
FROM `Data`
WHERE user_id = '" . mysql_real_escape_string($id) . "'
SQL;
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
?>
我知道我的代码不好,但它可以工作,我不知道如何进一步转换 config.php
只包含有关数据库连接的信息,现在我正在进入 MySQLi
最佳答案
下面是一些可能对您有所帮助的代码。它还演示了您应该使用的 bind_param。您可以对更新、插入和删除使用相同的代码(只是不要调用 mysqli_stmt_fetch)。
$query = "SELECT name, surname FROM users WHERE user_id = ?";
$result = '';
if ($stmt = mysqli_prepare($conn, $query))
{
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "i", $userId);
/* execute query */
if (!(mysqli_stmt_execute($stmt)))
{
sprintf("Execute failed in %s: %s\n", __FUNCTION__, mysqli_error($conn);
die();
}
/* bind result variables */
mysqli_stmt_bind_result($stmt, $name, $surname);
/* fetch values */
if (mysqli_stmt_fetch($stmt)) $result = "$name $surname";
/* close statement */
mysqli_stmt_close($stmt);
}
else
{
sprintf("Prepare failed in %s: %s\n", __FUNCTION__, mysqli_error($conn));
die();
}
关于php - 从 mysql 更新到 mysqli newbie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28339419/