如何将mysql转换为mysqli
我对登录脚本有以下问题。此刻我刷新我的网站,并想将mysql更改为mysqli。我有一个工作代码,它可以像mysql一样工作。现在我遇到麻烦,把它改成mysqli,这不起作用。如何将mysql转换为mysqli
原来这里是MySQL代码:
while($row = mysql_fetch_array($sql)){
$id = $row["id"];
session_register('id');
$_SESSION['id'] = $id;
mysql_query("UPDATE tableA SET time=now(), x4=x4 + 1 WHERE id='$id'");
mysql_query("DELETE FROM tableB WHERE (NOW() - INTERVAL 1 DAY) > Date AND ID='$id'");
$result = mysql_query("SELECT COUNT(*) AS val FROM tableB WHERE ID='$id'");
$count = mysql_fetch_assoc($result);
var_dump($count);
if ($count [val] <xy){
mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') ");
mysql_query("UPDATE tableA SET x7=x7 + 1 WHERE id='$id'");
这里是mysqli的版本,这不会工作,我不知道为什么:
$time = gmdate("M d Y H:i:s", time());
$id = '".$row["id"]."';
$get_id = "SELECT id FROM tableA WHERE x1='".$x1."' AND x2='".$x2."'";
$result = mysqli_query($db, $get_id);
if ($result === false) {
printf("Errormessage 1");
exit();
}
$row = $result->fetch_array(MYSQLI_ASSOC);
$update = "UPDATE tableA SET time=now(), x4=x4 + 1 WHERE id='".$row["id"]."'";
$result2 = mysqli_query($db, $update);
if ($result2 === false) {
printf("Errormessage 2");
exit();
}
$reset = "DELETE FROM tableB WHERE (NOW() - INTERVAL 1 DAY) > Date AND ID='".$row["id"]."'";
$result3 = mysqli_query($db, $reset);
if ($result3 === false) {
printf("Errormessage 4");
exit();
}
$count = "SELECT COUNT(*) AS val FROM tableB WHERE ID='".$row["id"]."'";
$result4 = mysqli_query($db, $count);
if ($result4 === false) {
printf("Errormessage 5");
exit();
}
$sum = $result4->fetch_assoc($count);
var_dump($sum);
if ($count [val] <xy){
$insert = "INSERT INTO TableB (Date, ID) VALUES(?,?) ";
if($query = $db->prepare($insert)){
$query->bind_param('ss', $time, $id);
$query->execute();
$update_x = "UPDATE tableA SET x7=x7 + 1 WHERE id='".$row["id"]."'";
$result5 = mysqli_query($db, $update_x);
if ($result5 === false) {
printf("Errormessage 5");
exit();
您正试图插入$time
成什么出现成为DATETIME
列,基于旧的mysql版本,但格式不正确。
$time = gmdate("M d Y H:i:s", time());
根据您的旧代码使用NOW()
,我们假设TableB.Date
是一个DATETIME
类型:
mysql_query("INSERT INTO tableB (Date, ID) VALUES (now(),'$id') ");
因此,在你新的代码,因为你没有为TableB
使用NOW()
插入,你应该创建$time
为YYYY-MM-DD
:
// Should be YYYY-MM-DDD H:i:s for MySQL
$time = gmdate("Y-m-d H:i:s", time());
// It gets inserted into TableB here
$insert = "INSERT INTO TableB (Date, ID) VALUES(?,?) ";
if($query = $db->prepare($insert)){
$query->bind_param('ss', $time, $id);
$query->execute();
或者,只是使用MySQL的NOW()
在新的代码,除非你有充分的理由来指定PHP代码的时间:
$insert = "INSERT INTO TableB (Date, ID) VALUES(NOW() ,?) ";
if($query = $db->prepare($insert)){
$query->bind_param('s', $id);
$query->execute();
好吧,我改变了NOW()。只需要用那个时间来计算。 – John 2012-03-13 14:10:40
您没有提及实际的错误,但它似乎从这里出现了这个问题:
$row = $result->fetch_array(MYSQLI_ASSOC);
你没有使用循环,就像你的mysql版本的代码。
你好,现在我得到了错误:警告:mysqli_result :: fetch_assoc()期望完全0参数,1在/var/www/web775/html/login.php在线100给出012elNULL该行是什么:$ sum = $ result4-> fetch_assoc($ count);但有2个参数?! – John 2012-03-13 14:11:47
你通过你的结果对象引用它,你不需要传递任何参数。你为什么通过$计数? – 2012-03-13 14:59:33
,因为我认为在使用mysqli时必须将它绑定到对象。当我开始它没有引用,我得到errormessage:数组(1){[“val”] =>字符串(1)“0”} – John 2012-03-13 15:06:33
什么是错误? – Jakub 2012-03-13 13:43:33
@John我删除了我的答案,并修正了引用语法荧光笔的问题。 – 2012-03-13 13:47:45
将不会显示错误。它只是为了达到目标。 – John 2012-03-13 13:48:26