【问题标题】:PHP if keep executing, despite the logicPHP 如果继续执行,尽管有逻辑
【发布时间】:2014-10-04 01:16:05
【问题描述】:

我一直在努力解决这个问题好几个小时了。我有一个 GET 变量,它基本上进入我的数据库并将 ready 字段从 1 切换到 0 或 0 到 1,具体取决于它当前是什么。

我使用这个网址:change-status.php?id=1

这是我在无限页面刷新后得到的打印结果: 1 (status) [Yes Accessed] status=1 yes=1 1=rating 1=local id 0 (response) 1 (id)

我无法弄清楚为什么当我刷新时它没有将状态设置为0。我进入 mySQL 并手动将其更改为0 以测试elseif,它可以工作。只是 if 部分不起作用。它实际上进入了if 语句,但它根本没有改变数据库。

<?php


require_once 'class/common.php';

$response;

$id = $_GET["id"];

$movies = new Movies();
$movies->get_status($id);

unset($status);
$status = $movies->ready;
$yes = 1;
$no = 0;

echo $status . " (status)<br>";

// Ready Yes, changing to Not Ready and return to AJAX 0
if ($status == $yes) {
    $movies->set_status($id, 0);
    $response = 0;
    echo "[Yes Accessed] status=".$status." yes=".$yes."<br>";
    echo $movies->ready."=rating<br>";
    echo $id."=local id<br>";
}
// Ready No, changing to Ready and return to AJAX 1
elseif ($status == $no) {
    $movies->set_status($id, 1);
    $response = 1;
    echo "[No Accessed] status=".$status." yes=".$yes."<br>";
}
else {
    $response = 404;
}

echo $response . " (response) " . $id . " (id)";


?>

这是我的数据库声明:

// Set Movie Status
public function set_status($id, $ready) {

    $statement = $this->database->prepare("UPDATE Movies SET Ready = ? WHERE ID = ?");
    $statement->bindParam(1, $id);
    $statement->bindParam(2, $ready);
    $statement->execute();

}

感谢任何人提供的任何帮助,我只是不知道为什么它不起作用。应该是的!

【问题讨论】:

  • 我认为这与数据类型有关。如果你想得到$yes$no的int值,你可以使用intval()函数到$_GET['id']。试一试。
  • @HendryTanaka 我不这么认为。 PHP 和 MYSQL 都会自动转换类型。
  • 令人困惑的是elseif 语句的工作方式与预期的一样。 if 语句几乎相同,除了不同的变量,它甚至可以访问它应该是什么,但它没有改变数据库中的任何内容。
  • 只需在脚本顶部启用错误报告error_reporting(E_ALL); ini_set("display_errors",1);。任何错误输出?
  • 输出似乎表明if 工作正常。为什么你认为它不起作用?看起来问题是数据库没有更新。

标签: php mysql if-statement get


【解决方案1】:

bindParam() 调用中的参数顺序错误。应该是:

$statement->bindParam(1, $ready);
$statement->bindParam(2, $id);

我鼓励你切换到命名参数,那么你就不会有这个问题了:

$statement = $this->database->prepare("UPDATE Movies SET Ready = :ready WHERE ID = :id");
$statement->bindParam(':id', $id);
$statement->bindParam(':ready', $ready);

【讨论】:

  • 天哪,非常感谢!我不敢相信我看得太多了。我把它们打开并繁荣,它现在正在工作。再次感谢!
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-20
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多