【问题标题】:Query MySQL with PHP用 PHP 查询 MySQL
【发布时间】:2015-01-05 17:35:11
【问题描述】:

我正在尝试使用 PHP 查询 MySQL 数据库并将结果作为 JSON 返回。我是 PHP 和 Web 开发的新手,所以我不确定自己做错了什么。我已经使用 MAMP 设置了数据库。我的参数正在打印,但我没有得到 JSON。在教程的帮助下,我已经走到了这一步。

编辑:我刚刚进入 phpMyAdmin 以确保它正常工作,当我单击 Server:localhost:8889 时,会弹出一个窗口,显示处理请求时出错。错误代码 404。

我认为这是问题所在,我只是不确定为什么它不起作用。我可能会重新安装 MAMP。

    <?php

$user = 'root';
$password = 'root';
$db = 'TestDB';
$host = '127.0.0.1';
$port = '8889';

$first_name = filter_input(INPUT_GET, 'first_name');
$last_name = filter_input(INPUT_GET, 'last_name');
$membership_number = filter_input(INPUT_GET, 'membership_number');

echo $first_name;
echo $last_name;
echo $membership_number;

// Create connection
    // $con = mysqli_connect("localhost", "root", "root", "TestDB");
    // $con = mysqli_connect("localhost", "root", "root", "TestDB", "8889", $socket);
    $link = mysqli_init();
    $con = mysqli_real_connect($link, $host, $user, $password, $db, $port);

    // Check connection
    if(mysqli_connect_errno()) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $sql = "SELECT * FROM NAME WHERE FIRST_NAME = \'$first_name\' and LAST_NAME = \'$last_name\' and MEMBERSHIP_NUMBER = \'$membership_number\'";

    $result = mysqli_query($con, $sql);

    if(!$result) {
        die('Query failed: ' . mysqli_error());
    }

    // Check for results
    // if ($result = mysqli_query($con, $sql)) {
    if($result) {
        // If there are results, create results array and a temporary one to hold the data
        $resultArray = array();
        $tempArray = array();

        // Loop through each row in the result set
        // while($row = $result->fetch_object()) {
        while($row = mysqli_fetch_object($result)) {
            // Add each row to the results array
            $tempArray = $row;
            array_push($resultArray, $tempArray);
        }

        echo $tempArray;
        echo $resultArray;
        echo $result;

        echo json_encode($resultArray);
    }

    // Close connections
    mysqli_close($con);

?>

【问题讨论】:

  • 您是否将一组结果返回到 $resultArray 中?
  • 听起来好像您的if 条件从未发生过。你要回结果吗?您没有错误检查您的查询。

标签: php mysql json mamp


【解决方案1】:

您需要更改 $sql 变量以删除单引号上的转义符。它们注册为字符串的一部分,因为您使用双引号来包装它。基本上,您是在告诉数据库运行查询“SELECT * FROM NAME WHERE FIRST_NAME = \'John\' and LAST_NAME = \'Smith\' and MEMBERSHIP_NUMBER = \'VRX78435\'”。如果你直接运行它会出错,因为转义字符没有转义。

$sql = "SELECT * FROM NAME WHERE FIRST_NAME = '$first_name' and LAST_NAME = '$last_name' and MEMBERSHIP_NUMBER = '$membership_number'";

这应该会为您解决问题。

您与服务器的连接也可能存在问题。 mysqli_query() 使用 mysqli_connect() 的结果来运行查询。 mysqli_real_connect() 只返回一个布尔值,因此对于这种特定用途是无效的(至少它在我的服务器上无法工作)。

这将是替换$con 的简单问题,然后您可以删除$link 变量。

$con = mysqli_connect($host, $user, $password, $db, $port);

这些更改,并假设 $first_name$last_name$membership_number 都是有效的,允许您的脚本为我运行,所以我希望这会有所帮助。

【讨论】:

  • 谢谢!引号和 mysqli_connect 的想法奏效了。
  • 很高兴能帮上忙。提醒一下,虽然 mysqli 是标准,但我强烈建议您切换到使用 PDO 格式。
【解决方案2】:

您似乎正在使用程序样式编码

代替

while($row = $result->fetch_object()) {

你需要mysqli_fetch_object的程序风格

while($row = mysqli_fetch_object($result)) {

【讨论】:

  • 不,肯定不是。我没有得到结果。如何在 if(!$result){} 中打印错误?
  • 而不是 mysqli_real_connect 尝试使用 $con = mysqli_connect("myhost","myuser","mypassw","mybd") 或 die("Error " .mysqli_error($link));跨度>
  • 我还是什么都没得到。
  • 你可以在你的while循环中使用var_dump($row),有没有结果显示?
  • 您使用 mysql_connect 的建议奏效了。我忘了删除链接变量。
猜你喜欢
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多