как конвертировать MySQL в MySQL - PullRequest
1 голос
/ 13 марта 2012

У меня следующая проблема со сценарием входа. в данный момент я обновляю свой сайт и хотел бы изменить mysql на mysqli. У меня есть рабочий код, который работает с MySQL, как и должно. Теперь у меня проблемы с преобразованием этого в MySQL, что не работает.

вот оригинальный код 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();

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Вы не упомянули фактическую ошибку, но похоже, что проблема возникает здесь:

 $row = $result->fetch_array(MYSQLI_ASSOC);

Вы не использовали цикл здесь как ваша версия кода MySQL.

1 голос
/ 13 марта 2012

Вы пытаетесь вставить $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') ");

Итак, в вашем новом коде, поскольку вы не используете NOW() для вставки TableB, вы должны создать $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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...