-5

我在下面有一个 php 代码,它在浏览器上输出 json 数组。

php 脚本是这样调用的:http://localhost/site/property.php

我想这样称呼它:http://localhost/site/property.php?propertyId=1&clientId=2

其中 propertyId 和 clientId 是属性表的列。如何更改此脚本以实现此目的

谢谢。我会很感激的。

<?php 

    $connection = mysql_connect("localhost", "root", "");

    if(!$connection)
    {
        die('Could not connect: ' .mysql_error());
    }

    mysql_select_db("Mobile", $connection); 

    $result = mysql_query("SELECT * FROM property");

    while($row = mysql_fetch_assoc($result))
    {
        $output[]=$row;
    }

    Print(json_encode($output));
    mysql_close($connection);

?>
4

6 回答 6

3

你会得到很多坚持这种方法,但如果你想要它在这里。

$result = mysql_query("SELECT * FROM property WHERE propertyID = '".(int)$_GET['propertyID']."' AND clientID = '".(int)$_GET['clientID']."'");

拜托,没有仇恨者:P

于 2013-05-23T10:39:37.777 回答
1

您必须检查“propertyId”和“clientId”是否作为 URL 参数传递(检查$_GET[<param>]),然后相应地调整您的查询。使用mysqli_*(而不是弃用的mysql_*)和准备好的语句来防止 SQL 注入,你的脚本可能看起来像这样。

$connection = mysqli_connect("localhost", "root", "");
              or die('Could not connect: ' . mysqli_connect_error());
mysqli_select_db($connection, "Mobile"); 

if (isSet($_GET["propertyId"]) && isSet($_GET["clientId"])) {
    $query = "SELECT * FROM property WHERE propertyId = ? AND clientId = ?";
    $stmt = mysqli_prepare($connection, $query);
    $stmt->bind_params("ii", (int)$_GET["propertyId"], (int)$_GET["clientId"]);
    $result = $stmt->execute();
} else {
    $result = mysqli_query($connection, "SELECT * FROM property");
}

while($row = mysqli_fetch_assoc($result)) {
    $output[] = $row;
}

Print(json_encode($output));
mysqli_close($connection);
于 2013-05-23T10:55:13.780 回答
1

首先,不应使用 mysql_* 函数。对于数据库事务,请使用 mysqli_* 函数(参见http://php.net/manual/en/book.mysqli.php)或 PDO(参见http://php.net/manual/en/book.pdo.php)。

你可以这样做:

$propertyID = (int) $_GET['propertyid'];
$clientID = (int) $_GET['clientid'];

$dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password);

$q = $conn->prepare("SELECT * FROM property WHERE property_id = ? AND client_id = ?");
$q->execute(array($propertyID, clientID));

while($r = $q->fetch()){
  print_r($r);
}
于 2013-05-23T10:48:25.480 回答
0
$_GET['propertyId'];

将从 url 字符串设置为 propertyId

于 2013-05-23T10:39:44.323 回答
-1

获取 GET 变量:

$propertyId = filter_input(INPUT_GET, 'propertyId', FILTER_SANITIZE_NUMBER_INT);
$clientId   = filter_input(INPUT_GET, 'clientId', FILTER_SANITIZE_NUMBER_INT);

如果输入无效,则不能使用:

if ( ! filter_var($propertyId, FILTER_VALIDATE_INT))
    die('Invalid GET variable: propertyId');
if ( ! filter_var($clientId, FILTER_VALIDATE_INT))
    die('Invalid GET variable: clientId');

然后确保输入是安全的:

$propertyId = mysql_real_escape_string($propertyId, $connection);
$clientId   = mysql_real_escape_string($clientId, $connection);

然后将变量添加到查询中:

$query = sprintf(
    "SELECT * FROM property WHERE propertyId = %d AND clientId = %d",
    $propertyId, $clientId
);
$result = mysql_query($query);
// ...

最后,您应该切换到更新更好的数据库驱动程序,例如 MySQLi(注意i,代表“改进的”)或 PDO。MySQL 驱动程序很旧,不应再使用。如果您坚持使用它,那么请特别注意您在 SQL 查询字符串中输入的内容——您应该始终小心,但是如果使用正确,较新的驱动程序可以保护您免受许多可能犯的错误。

于 2013-05-23T10:43:39.150 回答
-1

你可以试试这样

<?php 

    $connection = mysql_connect("localhost", "root", "");

    if(!$connection)
    {
        die('Could not connect: ' .mysql_error());
    }

    mysql_select_db("Mobile", $connection); 
    $where ="";

    if(!empty($_REQUEST['propertyId']))
    {
    $pid=mysql_escape_string($_REQUEST['propertyId']);
    $where .=" AND propertyId='".(int)$pid."'";
    }
    if(!empty($_REQUEST['clientId']))
    {
    $cid=mysql_escape_string($_REQUEST['clientId']);
    $where .=" AND clientId='".(int)$cid."'";
    }
    $result = mysql_query("SELECT * FROM property WHERE 1=1".$where);

    while($row = mysql_fetch_assoc($result))
    {
        $output[]=$row;
    }

    Print(json_encode($output));
    mysql_close($connection);

?>
于 2013-05-23T10:47:45.603 回答