【问题标题】:mysql database edited in phpmyadmin does not return query in php script在 phpmyadmin 中编辑的 mysql 数据库不会在 php 脚本中返回查询
【发布时间】:2013-07-17 22:01:05
【问题描述】:

这是一个奇怪的问题。我在名为父母的数据库表中有一个名为状态的字段。通过一个 php 脚本,我输入了一堆状态为“活动”的父母。后来,我使用 phpmyadmin 将其中两个更改为“休眠”状态。当我运行查询状态为活动的行时,phpmyadmin 和我的 php 脚本中的一切都很好。当我运行查询询问状态为休眠的行时,phpmyadmin 返回状态为休眠的两行,但我的 php 脚本不返回任何行。以下是相关的代码:

// get value of radio button for $active
$active = stripslashes(strip_tags($_POST['active']));
if (!$active) {
  $active = 'active';
}

// Similar process for value of $myOrderby, 
// which can have value of 'name' or 'email' and works fine

$query = "SELECT 
    Parents.parentID, 
    Parents.parentName, 
    Parents.parentEmail, 
    Students.nickName,
    Students.Lname
  FROM Parents, Students
  WHERE Parents.parentID=Students.parentID
    AND Parents.status=:active
  ORDER BY $myOrderby ASC" ;
$stmt = $db->prepare($query);
$stmt->bindValue(':active', $active, PDO::PARAM_STR);

try {
   $stmt->execute();
   $affected_rows = $stmt->rowCount();
   if ($affected_rows > 0) {
      // various actions...
   }
} catch (PDOException $ex) {
   $message = $ex->getMessage() ;
   $filename = 'admin-parents' ;
   notifyMe($message, $filename) ;
}

然而,奇怪的是,如果我再次使用 phpmyadmin 将状态为“休眠”的两行更改回“活动”状态(不在输入框中使用任何标点符号),这两行不会显示在所有活跃父母的 php 结果。这就是让我开始整个探索的问题。

澄清:myphpadmin 查询总是为这两行返回正确的结果,无论是在状态为“活动”还是状态为“休眠”时。 (我通过 myphpadmin 更改它们。)但是,无论它们的状态如何,php 脚本都不会返回这两行。

【问题讨论】:

  • 你在做$stmt->execute();吗?
  • 如果您SELECT DISTINCT status FROM Parents,您会看到什么 - 基本上,这些行已分配的状态是否存在问题?
  • 你的“默认值”总是被后续的赋值所拖累。你为什么这样做?另外stripslashes 是为了消除最初不应该启用的“魔术引号”功能造成的损害,strip_tags 完全没用。
  • SQL.injection - 是的,请参见上面添加的代码。 tadman - 首次加载页面时,没有 $active 的值,因为尚未提交表单(到度假村列表)。实际上做一些不同的事情;请参阅上面的修订关于其他 cmets,谢谢。显然,重用了一些旧代码。 andrewsi - 假设你的意思是在 phpmyadmin 中,我得到两行:第一行是活动的,第二行是休眠的。
  • @andrewsi - 它返回两行:一行表示活动,另一行表示休眠。这对我们解决问题有什么启示? (PS 我要到星期一才会离开办公室;不要忽视任何人。)

标签: php mysql pdo phpmyadmin


【解决方案1】:

您需要设置用户选择了哪个按钮,在查询中使用结果作为参数 假设单选按钮设置为

<Input type = 'radio' Name ='active' value= 'active'>Active
<Input type = 'radio' Name ='active' value= 'dormant'>Dormant


// get value of radio button for $active
$active = $_POST['active'];

}
ETC..............

分配参数

$stmt->bindValue(':active', $active, PDO::PARAM_STR);

【讨论】:

  • 我如何在 mysql 查询中使用它? (PS 将在星期一之前下班——不要忽视任何人。)
  • 我不明白如何使用这些信息或它与查询的关系。
  • 耐人​​寻味。 $status 的值与 $selected_radio 的值有何不同?
  • 它没有。需要更多的咖啡。
  • 好的,这让人放心,因为您的建议正是我所做的,除了我还为 $active 添加了一个默认值。谢谢,祝咖啡好运!
【解决方案2】:

事实证明:父表中状态为“休眠”的两行在学生表中没有任何行。该查询仅返回父级也有学生的行。这不正是我想要的。回到绘图板!但我很欣慰了解问题的根源!感谢大家! :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多