2011-11-01 151 views
0

我到目前为止的代码已经返回了我需要的代码。我看不出这里出了什么问题。 对代码进行“糟糕的”调整后,它会提供正确的输出,但我认为更好地正确执行。 为什么它不起作用?PHP:使用bindValue的PDO(mysql)返回错误的结果

错误输出:阵列([L] => L)

右输出:阵列([L] => 9)

此代码给出错误的输出:

public function getStockByID_SIZE($size, $stockId){ 
    try { 

    $this->_dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sth=$this->_dbh->prepare("SELECT :size from stock WHERE id_product = :stockId"); 
    $sth->bindValue(':size', $size, PDO::PARAM_STR); 
    $sth->bindValue(":stockId", $stockId); 

    $sth->execute(); 
    $result = $sth->fetch(PDO::FETCH_ASSOC); 
    return $result; 

    } catch (PDOException $e) {  
     return "Error"; 
    } 
} 

相同的代码,但用(坏)调整返回正确的代码:

$sth=$this->_dbh->prepare("SELECT $size from stock WHERE id_product = :stockId"); 

//比较:

$sth=$this->_dbh->prepare("SELECT :size from stock WHERE id_product = :stockId"); 
$sth->bindValue(':size', $size); //use of PDO::PARAM_STR doenst matter for outcome 

回答

2

$sth=$this->_dbh->prepare("SELECT L from stock WHERE id_product = :stockId");才是正道。

你的方式只是做SELECT 'L' from stock WHERE id_product = :stockId它给你结果'L'

你可以只是在做类似下面验证$size

$sth=$this->_dbh->prepare("SELECT $size from stock WHERE id_product = :stockId");

+0

之后,但大号变化,我可以用$大小,但是,好不好?我会调整您的代码 – Rob

+0

$ size is validates ... – Rob

+0

@Rob您是指$ size有效吗? – xdazz