【问题标题】:PHP - Laravel, MySQL, Select Exists query resulting variable and it's accessPHP - Laravel,MySQL,Select Exists 查询结果变量及其访问权限
【发布时间】:2020-06-28 17:49:02
【问题描述】:

我在 Laravel 中有这样的 SQL 查询:

$PDO = DB::connection('mysql')->getPdo();
$sql = <<< SQLEND
SELECT EXISTS(SELECT * FROM tpalautus where student_id = $id AND hnro=$num) ;
SQLEND;

$allsql = $PDO->prepare($sql);
$allsql->execute();
$result = $allsql->fetchAll((\PDO::FETCH_OBJ));
dd($result);

dd 告诉我:

array:1 [▼
  0 => {#345 ▼
    +"EXISTS(SELECT * FROM tpalautus where student_id = 4 AND hnro=1)": 0
  }
]

我的问题是我希望对这个结果做 if 语句,检查它是 0 还是 1,我该怎么做? 我发现很难选择这个,因为对象键是 SQL 查询语句。 例如 $result[0]->KEY_HERE 不适用于这么长的字符串查询语句。

我可以以某种方式选择我想要的键名吗?还是其他方式?

【问题讨论】:

  • 您是否有任何理由不使用 Eloquent ORM,而是在您的代码中暴露了 SQL 注入漏洞?
  • 这是一项学校任务,我们先做了 Eloquent,然后我们进行了这个练习,您可以“手动”执行 SQL。
  • 我不确定我是否完全理解预期的结果,但您是否检查了 EXISTS w3schools.com/sql/sql_exists.asp 的文档
  • 也可能是一个指针:stackoverflow.com/a/41490188/55049

标签: php mysql sql laravel


【解决方案1】:

您可以使用get_object_vars 将对象转换为数组,然后将键及其值翻转以方便访问

$vars = get_object_vars($result[0]);
$exists = array_values($vars);
if ($exists[0]) {
  dd('true');
}

希望对你有帮助

【讨论】:

  • 谢谢!我不知道我可以这样翻转。我还找到了不使用存在的替代解决方案,只需运行限制为 1 的正常选择,然后检查 count() > 0
【解决方案2】:

我想出了替代方法,不需要使用 EXISTS,只需使用 select 运行查询

SELECT * FROM tpalautus where student_id = $id AND hnro=$num limit 1;

然后我检查 count($result) > 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2017-12-24
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    相关资源
    最近更新 更多