Php 如何在PDO准备的SELECT WHERE语句中使用传递的变量

Php 如何在PDO准备的SELECT WHERE语句中使用传递的变量,php,variables,pdo,Php,Variables,Pdo,我试图弄清楚如何在PDO准备的语句中使用php变量。下面的代码不返回任何内容。我不确定的部分是 $stmt = $conn->prepare("SELECT * FROM laptop WHERE '$ckey' = :avalue"); 我尝试使用一个变量作为键和值,它似乎没有返回结果。switch语句用于查找用户填写的字段。这是对基本库存系统的基本搜索。我知道有开源解决方案可用,但我的公司不允许我们在网络上使用开源软件。我还意识到输出没有格式化成表,但我想我应该让查询工作起来,然后担

我试图弄清楚如何在PDO准备的语句中使用php变量。下面的代码不返回任何内容。我不确定的部分是

$stmt = $conn->prepare("SELECT * FROM laptop WHERE '$ckey' = :avalue");
我尝试使用一个变量作为键和值,它似乎没有返回结果。switch语句用于查找用户填写的字段。这是对基本库存系统的基本搜索。我知道有开源解决方案可用,但我的公司不允许我们在网络上使用开源软件。我还意识到输出没有格式化成表,但我想我应该让查询工作起来,然后担心预绑定输出。我也意识到有一些类似的问题,但我没有看到有人试图在语句的WHERE部分使用变量。如果这是因为它不起作用,而除了我,每个人都知道这一点,我道歉

这是整个代码块

    function mkquery($ckey,$cdata)
{


try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    }

                catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }


   $stmt = $conn->prepare("SELECT * FROM laptop WHERE '$ckey' = :avalue"); 
 //$stmt is the prepared query, you execute it to perform the query
   $stmt->bindParam(':avalue',$ckey, PDO::PARAM_STR);             
   $stmt->execute();
   $result = $stmt->fetchAll();  
                foreach($result as $val ) {

                                echo $val['Model'] . " ";
                                echo $val['Name'] . " ";
                                echo $val['DellTag'] . " ";
                                echo $val['HHSCTag'] . " ";
                                echo $val['OS'] . " ";
                                echo $val['KBOX'] . " ";
                                echo $val['SB'] . " ";
                                echo $val['Issued'] . " ";
                                echo $val['Tech'] . " ";
                                echo "<br>";

    }
}

switch (isset($_POST))  {

case isset($_POST['name']):
                $selector = 'name';
                mkquery($selector,$_POST['name']);
                break;

case isset($_POST['model']):
                $selector = 'model';
                mkquery($selector,$_POST['model']);
                break;

case isset($_POST['delltag']):
                $selector = 'delltag';
                mkquery($selector,$_POST['delltag']);
                break;

case isset($_POST['hhsctag']):
                $selector = 'hhsctag';
                mkquery($selector,$_POST['hhsctag']);
                break;

case isset($_POST['city']):
                $selector = 'city';
                mkquery($selector,$_POST['city']);
                break;

case isset($_POST['kbox']):
                $selector = 'kbox';
                mkquery($selector,$_POST['kbox']);
                break;

case isset($_POST['sb']):
                $selector = 'sb';
                mkquery($selector,$_POST['sb']);
                break;

case isset($_POST['issued']):
                $selector = 'issued';
                mkquery($selector,$_POST['issued']);
                break;

case isset($_POST['tech']):
                $selector = 'tech';
                mkquery($selector,$_POST['tech']);
                break;

default: 
                echo 'No input on form detected';
                break;

                                                                                                }

                                                                         a                                       


$conn = null;

准备好的语句的全部意义在于,您不必在查询字符串中使用变量。RTM,$stmt=$pdo->准备“从tbl中选择*,其中字段=:bind_key”;要获取PDOStatement实例,则:$stmt->execute[':bind_key'=>$valueInWhere];。要获取结果,$stmt->fetchPDO::FETCH_ASSOC;'$是专栏吗?如果是这样的话,它应该在backticks中。您正在将“$ckey”与绑定的$ckey进行比较,这让人感到困惑。很抱歉给您带来了困惑。我来自C++背景,有十年的锈迹,我习惯了值的传递。我只想获取post数据并使用它生成搜索结果类型的查询。仍然不清楚什么是什么。还可以使用@标记用户,如果没有更新,任何人都不会收到通知。$ckey是您要搜索的列名还是值?