【问题标题】:How to access a field from mysql table from url with PHP如何使用 PHP 从 url 访问 mysql 表中的字段
【发布时间】:2014-05-20 22:17:02
【问题描述】:

您好,我正在尝试从 url 访问 mysql 表中的字段,例如 localhost/test.php=id=2

btw im noob to xml and php 所以请原谅我..

任何建议或教程将不胜感激..

这是我正在处理的代码

<?php
 header("Content-Type: text/xml"); 
 $xmlBody = '<?xml version="1.0" encoding="ISO-8859-1"?>';
 $xmlBody .= "<XML>";

 $dbhost = 'localhost:3036';
 $dbuser = 'nas';
 $dbpass = 'root';
 mysql_select_db('db_home') or die("no database");

 $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());

 $sql = mysql_query("SELECT * FROM table_gas ORDER BY datetime DESC LIMIT 0, 20");

while($row = mysql_fetch_array($sql)){

$id = $row["gas_id"]; 
$timestamp = $row["timestamp"];  
$value = $row["value"]; 
$datetime = strftime("%b %d, %Y", strtotime($row["datetime"])); 
$xmlBody .= '
<Data> 
<DataID>' . $id . '</DataID> 
<DataTime>' . $timestamp . '</DataTime>
<DataValue>' . $value . '</DataValue>
<DataTime>' . $datetime . '</DataTime>
</Data>';
} 
mysql_close(); 
$xmlBody .= "</XML>";
echo $xmlBody; 
?>

当我把它放到地址栏 local/xmltest.php?DataID=2 我得到一个空白屏幕..

【问题讨论】:

  • 如@developerwjk 的回答中所述。在 sql 查询上方添加$DataID = $_GET['DataID'];。在您的实际 sql 查询中添加 WHERE id = '$DataID'

标签: php html mysql sql xml


【解决方案1】:

首先,您不应该再使用mysql_。我个人喜欢 PDO,所以这是我的答案

如下所述,url应该是localhost/xmltest.php?DataID=2

header("Content-Type: text/xml");
$xmlBody = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xmlBody .= "<XML>";

$dbhost = 'localhost'; //No need to set the port if default is 3306
$dbuser = 'nas';
$dbpass = 'root';
$dbname = 'db_home';

// Check if ?id= is set or not
if ( isset($_GET['DataID']) ) {
    // Initiate the connect to the MySQL DB using PDO extention. You'll need to activate PDO if it's not done then restart Apache
    $db = new PDO('mysql:host='. $dbhost .';dbname='. $dbname, $dbuser, $dbpass);

    $query = $db->prepare("SELECT * FROM table_gas WHERE id = :id ORDER BY datetime DESC LIMIT 0, 20");
    $query->bindParam(':id', $_GET['DataID']); // Grab the value inside ?id= and pass it in the query
    $query->execute(); // Execute the query with the parameters
    $result = $query->fetchAll(); //Fetch everything and store it in a variable

    foreach ($result as $row) { // I like using foreach but while loop works too
        $xmlBody .= '
        <Data> 
        <DataID>' . $row["gas_id"] . '</DataID> 
        <DataTime>' . $row["timestamp"] . '</DataTime>
        <DataValue>' . $row["value"] . '</DataValue>
        <DataTime>' . strftime("%b %d, %Y", strtotime($row["datetime"])) . '</DataTime>
        </Data>';
    }
    $xmlBody .= "</XML>";
    echo $xmlBody; 
} else {
    echo "Invalid ID."; //Output error message if test.php?id= is not set
}

【讨论】:

  • 嗨,我收到以下错误警告:PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /var/www/xxx.php on line 24 任何建议..谢谢
  • 我的错,我打错了应该是:id而不是:uid就行了$query-&gt;bindParam(':uid', $_GET['DataID']);我修改了代码
  • 哈哈,再次抱歉。我在查询中犯了一个错误。当我半醒时回答这个问题时,就会发生这种情况。
  • 运气不好,再次抱歉.. 192.168.1.111/yyy.php?DataID=2 我还是黑屏
  • 1 gas_id int(16) 无 无 AUTO_INCREMENT Change Change Drop Drop More 显示更多操作 2 更新时的时间戳 CURRENT_TIMESTAMP 否 0000-00-00 00:00:00 ON UPDATE CURRENT_TIMESTAMP Change Change Drop Drop More显示更多操作 3 value int(20) 无 无 Change Change Drop Drop More 显示更多操作 4 datetime datetime 无 无 Change Change Drop Drop More 显示更多操作
【解决方案2】:

首先按照 developerwjk 的建议修复您的网址。所以;

localhost/test.php?id=2

我还假设 DataID 是您想要获取的 table_gas 条目的 id。

可以试试;

$DataID = mysql_real_escape_string($_GET['DataID']);
$sql = mysql_query("SELECT * FROM table_gas WHERE gas_id = ".$DataID." ORDER BY datetime DESC LIMIT 0, 20");

这将只获取 url 中指定的行。

我建议转移到 MySQLi,因为 MySQL 很快就会贬值, 并转向参数化查询以提高安全性。

类似的。

$DataID = $_GET['DataID'];
$q = $mysqli->prepare("SELECT * FROM table_gas WHERE gas_id = ? ORDER BY datetime DESC LIMIT 0, 20")
$q->bind_param("i", $DataID);
$q->execute();
$q->bind_result($id, $timestamp, $value, $datetime);
while($q->fetch()){
    $xmlBody .= '
      <Data> 
          <DataID>' . $id . '</DataID> 
          <DataTime>' . $timestamp . '</DataTime>
          <DataValue>' . $value . '</DataValue>
          <DataTime>' . $datetime . '</DataTime>
      </Data>';
}

希望这会有所帮助,并且认真研究 MySQLi,即使您不使用 OO 方法。

【讨论】:

    【解决方案3】:

    网址localhost/test.php=id=2 无效。应该是localhost/test.php?id=2

    那个?标记开始 GET 请求的参数列表。你通过$_GET['id']检索参数的值

    如果您得到一个空白屏幕,这可能是您的 PHP 中的语法错误,但您关闭了错误报告。对于您的开发服务器,您应该打开错误报告以查看它是什么。见How to get useful error messages in PHP?

    【讨论】:

    • 感谢您的回复,我仍然得到一个空白屏幕 :-( 代码看起来没问题吗?
    • 我找不到 php.ini 文件你知道它在哪里吗?
    • PHP的安装路径下
    【解决方案4】:

    看这里:

    mysql_select_db('db_home') or die("no database");
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
    

    您实际上是在尝试选择一个数据库,而您甚至还没有连接到服务器。

    换一种方式试试:

    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die (mysql_error());
    mysql_select_db('db_home') or die("no database");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多