【问题标题】:Prepared Statements in MariDBMariaDB 中的准备好的语句
【发布时间】:2019-08-19 10:14:38
【问题描述】:

我正在摆弄我的测试数据库,学习如何设置它。 我正在使用 PHP 和 PDO 对象来访问我的数据库并从中获取数据。 我还在使用针对 MySQL 注入的准备好的语句。

这是我正在使用的代码:

mainframe();

function mainframe(){
  $connection = establishConnectionToDatabase();
  $result = getData($connection);
  //var_dump($result);
  //echo json_encode($result);
  echo $result;
}

function getData($connection){
  $fetch = $connection->prepare("SELECT * FROM users_tbl");
  $fetch->execute();
  $result = $fetch->fetchAll(PDO::FETCH_ASSOC);

  return $result;
}

function establishConnectionToDatabase(){
  try
  {
     $connection = new PDO('mysql:host=localhost;dbname=foundationtests',
           'verwalter','test');
      }
  catch(PDOException $e)
  {
        echo $e->getMessage();
  }

  return $connection;
}

正在访问的表如下所示(见屏幕截图): https://imgur.com/I06RF9e

执行上述代码时,我只是回来了


注意D:\foundationtests\src\assets\php\test.php12中数组到字符串的转换>
数组

我已经在没有准备好的语句的情况下进行了尝试,它确实有效。我不知道我错过了什么。

【问题讨论】:

  • 它与准备好的语句无关。 $result 是一个数组,不能回显数组。
  • 但是,您可以例如 var_dump 它们,显然您之前已经在那里,然后注释掉......为什么?
  • @misorude 谢谢!好吧,我现在超级困惑,因为我过去通过 echo json_encode($data); 回显了很多数组; ,在另一个工具中。但是在那里,我没有使用准备好的语句来获取那里的数据,所以也许这与它有关?。
  • 您不能直接回显数组。 json_encode 接受一个数组作为其输出。要输出标准数组,您需要使用 print_r() 或 var_dump()
  • “因为我过去通过 echo json_encode($data) 回显了很多数组” - 那么你实际上并没有回显数组,而是回显了 strings,因为这是 json_encode 返回的内容。

标签: php mysql mariadb


【解决方案1】:

你的查询很好,你不能回显一个数组。

当你返回一个数组时,试试这个

function getData($connection){
  $fetch = $connection->prepare("SELECT * FROM users_tbl");
  $fetch->execute();
  $result = $fetch->fetchAll(PDO::FETCH_ASSOC);

  return (object)$result;
}

这会将您的值作为对象返回。然后,您可以使用 $result->user_id 回显任何值。

您可以了解更多关于对象here

更新

正如已经指出的,您也可以通过将第 4 行从 $result = $fetch->fetchAll(PDO::FETCH_ASSOC); 更改为 $result = $fetch->fetchAll(PDO::FETCH_OBJ);,然后将最后一行更改回 return $result; 来使其作为对象返回

【讨论】:

  • 或者你可以只要求 PDO 返回一个对象而不是关联数组。
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 2012-12-01
相关资源
最近更新 更多