pdo调用填充变量以便稍后使用

时间:2015-04-21 05:14:34

标签: javascript php mysql svg pdo

尝试从基于click事件的数据库中获取信息,并将数据加载到稍后在表单中使用的变量中。这是代码的一部分。使用PDO ::

建立了与reps表的连接
function fill_contact(evt) //display click event
    {
        var country_id = evt.target.id
        document.getElementById('country_name').firstChild.data = country_id

        <?php 
   $country = $_GET['country_name'];
   try {
   // Establish server connection and select database
   $dbh = new PDO("mysql:host=$host;dbname=$database", $user, $password);
   $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   } catch(PDOException $e){
   die("Sorry, we could not connect you to this database, please contact the Administrator to sort this out.". $e->getMessage());/** try open contact form here**/
   }
   /** run prepare to select records **/    
   $stmt = $dbh->prepare("SELECT firstname, lastname, email, photo FROM reps WHERE country = :country");
   $stmt->bindParam(':country', $country, PDO::PARAM_STR);
   $stmt->execute();
   ?>

  <script language="javascript" type="text/javascript">
   function fill_contact(evt) //display click event
  {
    var country_id = evt.target.id
    document.getElementById('country_name').firstChild.data = country_id
    /* need to get a ajax http fetch statement here???*/
  }

    function getDataFile(mapString , useData) 
    {
    /** call getURL() if available **/
    if (window.getURL) {
    getURL(mapString , useData);
    }
    else
    /** call XMLHttpRequest() if available **/
    if (window.XMLHttpRequest) 
    {
        function XMLHttpRequestCallback() 
        {
        if (xmlRequest.readyState == 4) {        useData({success:xmlRequest.status,content:xmlRequest.responseText,contentType:xmlRequest.getResponseHeader("Content-Type")})
        }
        }
     var xmlRequest = null;
        xmlRequest = new XMLHttpRequest();
        xmlRequest.open("GET",mapString,true);
        xmlRequest.onreadystatechange = XMLHttpRequestCallback;
        xmlRequest.send(null);
        }
    /** write an error message if either method is not available **/
    else {
    alert("your browser/svg viewer neither supports window.getURL nor window.XMLHttpRequest!");
    }  
    }
 </script>

<body>
 <div id="IndexPage_Left_top">
            <h1>Country: <span class="label" id="country_name"> </span>  </h1>
            <table >
                <tbody>                    
                  <tr>
                  <td><h4>Regional Representative: </h4></td>
                  <td><h4><span class="label" id="firstname">$firtname</span> <span class="label" id="lastname">$lastname</span></h4></td><!--get Rep name from database based on country from svg to display-->
                  </tr>
                  <tr></tr>
                  <tr height="300px" align="top">
                  <td ><h4> Photo:</h4></td><!--get Rep photo from database based on country from svg to display-->
                  <td><span class="photo" id="photo"></td>
                  </tr>
                  <tr>
                  <td></td>
                  <td><input style='margin-top: 20px;' type="submit" value="Contact me" id='jqxButton' /></td>
                  </tr><!-- if clicked, it opens a contact form below, the email address is hidden-->

                </tbody>
            </table>    
        </div>
        <div id="IndexPage_Left_bottom">
        <h4>email form here<h4>
        <p> email address is <span class="label" id="email">$email</span> </p><!-- if email is clicked, it opens a contact form here with email address from above -->
        </div>
    </div>
    <div id="IndexPage_Right">

 <svg id="map" version="1.1"    rest of svg code    

这与我关于svg的另一个问题有关。 (displaying data from sql from clicking on svg map)一旦我点击一个svg,它会填充用于显示有关所点击国家/地区的数据的变量。变量也用于填充联系表格。

它不想填充表格?

2 个答案:

答案 0 :(得分:0)

您在PHP代码中有错误

更改您的代码$query = $dbh->prepare('SELECT firstname, lastname, email FROM reps WHERE 'country_id' = :country');

  $query = $dbh->prepare('SELECT firstname, lastname, email FROM reps WHERE country_id = :country');

答案 1 :(得分:0)

问题在于这些问题,这就是他们应该看的样子:

$query = $dbh->prepare('SELECT firstname, lastname, email FROM reps WHERE country = :country_id');
$query->bindValue(':country_id', $country, PDO::PARAM_INT);

在一端,参数名为country_id,但您将值绑定到参数country。 PDO很棒,但它还不能做心灵感应。

我非常喜欢使用位置参数,删除所有这些容易出错的手写:

$query = $dbh->prepare('SELECT firstname, lastname, email FROM reps WHERE country = ?');
$query->execute(array($country));

您始终可以使用要绑定的值将数组传递给execute()方法。对于位置参数,数组必须是0索引数组,其中包含与查询中的顺序匹配的值 。您也可以使用命名参数执行此操作,而无需匹配订单:

$query->execute(array(':country_id'=>$country));

请注意,您无法将两者混合在一起。如果使用命名参数准备查询,它们必须全部都是命名参数,并且如此绑定,如果使用位置占位符,它们必须都是位置占位符,并且必须这样绑定。