【问题标题】:PHP Variable in Select StatementSelect 语句中的 PHP 变量
【发布时间】:2011-03-29 09:55:59
【问题描述】:

我已经编写了这个正在运行的 PHP 脚本,现在我想将行名更改为一个变量(不确定行是否正确),我的意思是 select 名字... 我已经尝试了几乎所有东西,但没有什么能给我正确的结果。 我知道在 ("'.$var .'") 之类的语句中使用变量的正常方法是行不通的。

<?php
require_once 'config.php';

$id = $_GET["id"]; //ID OF THE CURRENT CONTACT
$user = $_GET["user"];  //ID OF THE CURRENT USERS

$query = mysql_query("SELECT name FROM contacts WHERE contact_id='". mysql_real_escape_string( $id ) ."' and user_id='1';");

$retval = mysql_fetch_object($query)->name;

$retval = trim($retval);
echo $retval;
?>

【问题讨论】:

  • 我注意到您的其他问题是英文的,如果这个问题也是如此,您可能会得到更多答案。
  • 使用 alt+shift 并返回 :-)
  • 翻译版我也看不懂:translate.googleusercontent.com/…
  • 请用英文提出您的问题,以帮助最多人数或人数阅读并帮助您。
  • 我已经把它翻译成我蹩脚的英语;)

标签: php mysql html variables select


【解决方案1】:

这更容易不是吗?

$sql_insert = 
"INSERT INTO customers (        
`name`,
`address`,
`email`,
`phone`
) 
VALUES (        
'$name',
'$address',     
'$email',
'$phone'
)";

【讨论】:

  • 感谢您的回答。它比所有其他解决方案更容易阅读。这在当前版本的 php 中是新的吗?或者这总是可能的?
【解决方案2】:

这是您要找的吗?即使是您用德语提出的问题我也不清楚:

$field = 'name';
$query = mysql_query("SELECT $field FROM contacts WHERE contact_id='". mysql_real_escape_string( $id ) ."' and user_id='1';");
$retval = mysql_fetch_object($query)->$field;

【讨论】:

  • @Col。弹片:取决于 $field 的来源以及是否正确转义。
  • @Col。弹片:不是这样,如果他只是从 GET/POST var 中获取 $name 而没有检查,那么是的,你说得有道理。
  • @dbemerlin 哦,你能告诉我如何正确逃脱吗?
  • 为什么最后一行有一个“$retval = $retval =”? (另外,为什么不在 $field 周围使用 mysql_real_escape_string 呢?)
  • @middaparka 因为 mysql_real_escape_string 无济于事
【解决方案3】:

你可以像这样使用它。目前我假设你只得到一排并且只想使用一个字段。

<?php
require_once 'config.php';

$id = $_GET["id"]; //ID DES DERZEITIGEN KONTAKTES
$user = $_GET["user"];  //ID DES DERZEITIGEN USERS

//Use variable inside closures `` and just in case escape it, depends how you get variable
$query = mysql_query("SELECT `".mysql_real_escape_string($variable)."` FROM contacts WHERE contact_id='". mysql_real_escape_string( $id ) ."' and user_id='1';");


if (!$query) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$row = mysql_fetch_row($query); //Retriev first row, with multiple rows use mysql_fetch_assoc
$retval = $row['0']; //Retriev first field

$retval = trim($retval); 
echo $retval;
?>

【讨论】:

    【解决方案4】:
    • 请用英文发帖。其他人都这样做。
    • 尝试使用不同的获取方法 - 获取关联数组,然后使用动态参数检索所需的任何列。
    • 您是否考虑过使用 PDO?

    【讨论】:

    • 我也建议使用 PDO。好多了。
    【解决方案5】:

    我相信您由于使用了“行”一词而(无意中)混淆了问题。从您的示例来看,您的意思是字段/列。听起来您希望使用可以通过任何这些方法完成的变量来指定要选择的字段...

    $fields = "name, age";
    
    $sql = "SELECT $fields FROM table";
    $sql = "SELECT {$fields} FROM table";
    $sql = "SELECT ".$fields." FROM table";
    

    NB在 $fields 元素中有安全的日期很重要,我建议使用允许值的白名单,即

    // assuming $_POST['fields'] looks something like array('name','age','hack');
    $allowed = array('name', 'age');
    $fields = array();
    
    foreach ($_POST['fields'] as $field) {
       if (in_array($field, $allowed)) {
          $fields[] = $field;
       }
    $fields = implode(', ', $fields);
    

    【讨论】:

    • 我试过这个:“.$fields。”但它对我不起作用,所以我使用这个 $fields
    • mikep,我给出的所有三个解决方案都工作得很好,如果你在实现它时遇到问题,那是因为你的实现搞砸了,最喜欢搞乱单引号/双引号字符串。这是完全有效的 PHP。
    【解决方案6】:

    这不行吗?

    $result = mysql_fetch_array($query);
    
    echo trim($result['name']);
    

    【讨论】:

      【解决方案7】:

      您永远不应该将变量放入字段列表中。
      如果需要变量字段名称,请选择 * 然后使用您的变量获取特定字段

      <?php
      require_once 'config.php';
      
      $id = mysql_real_escape_string($_GET["id"]); //ID DES DERZEITIGEN KONTAKTES
      $user = $_GET["user"];  //ID DES DERZEITIGEN USERS
      
      $query  = "SELECT * FROM contacts WHERE contact_id='$id' and user_id='1'";
      $result = mysql_query($query) or trigger_error(mysql_error().$query);
      
      $row = mysql_fetch_array($result);
      
      //and finally
      $fieldname = "name";
      $retval = $row[$fieldname];
      
      echo $retval;
      ?>
      

      【讨论】:

      • 是的,我可以这样做,你是对的,但查询应该是“SELECT * FROM contacts WHERE contact_id='$id' and user_id='1'”而不是“SELECT name FROM 联系人 WHERE contact_id='$id' and user_id='1'"。
      猜你喜欢
      • 2011-09-07
      • 2013-09-28
      • 2018-10-13
      • 1970-01-01
      • 2015-02-21
      • 2012-11-24
      • 2011-09-09
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多