亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysql準備好的Select語句連接不起作用

mysql準備好的Select語句連接不起作用

PHP
鴻蒙傳說 2022-01-02 19:52:10
所以我準備好的聲明有效,但我不知道如何告訴 php 加入兩列。我嘗試了一個沒有準備的聲明并且有效。我嘗試向 bind_results 添加更多變量。$stmt = mysqli_prepare($con, "Select tblcategory.CategoryName as catname,tblcategory.id as catid, tblwritter.Writter as writtername, tblwritter.writterdescription as writterdescription, tblwritter.PostingDate as writterpostingdate, tblwritter.UpdationDate as writterupdationdate, tblwritter.WritterId as writterid from  tblwritter join tblcategory on  tblwritter.CategoryId=tblcategory.id where  tblwritter.Is_Active=1 and  WritterId=?");$stmt->bind_param("i", $writterid);$writterid=intval($_GET['scid']);$stmt->execute();$stmt->bind_result($catname,$catid,$writtername,$writterdescription,$writterpostingdate,$writterupdationdate,$writterid);$stmt->fetch();                                                <div class="form-group">                                                    <label class="col-md-2 control-label">Category</label>                                                    <div class="col-md-10">                                                      <select class="form-control" name="category" required>                                                   <option value="<?php echo $catid;?>"><?php echo $catname;?></option><?php$stmt = $con -> prepare('select id,CategoryName from  tblcategory where Is_Active=?');$stmt -> bind_param('i', $Is_Active);$Is_Active = 1;$stmt -> execute();$stmt -> store_result();$stmt -> bind_result($id, $CategoryName);$stmt -> fetch(); // Feching active categories$ret=mysqli_query($con,"select id,CategoryName from  tblcategory where Is_Active=1");while($result=mysqli_fetch_array($ret)){    ?><option value="<?php echo htmlentities($result['id']);?>"><?php echo htmlentities($result['CategoryName']);?></option><?php } ?>                                                        </select>                                                     </div>                                                </div>預期的結果是類別應該下拉以編輯類別。
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您的問題不清楚,因為您未能隔離您的代碼究竟在哪里失敗,并且沒有告訴我們您收到了什么錯誤。(直到改變,我不能贊成你的問題)


不過,您的問題很清楚預期的效果。我編寫了一個未經測試的腳本,我認為它應該可以按要求工作。


<?php

$config = ['localhost', 'root', '', 'dbname'];

if (!$con = new mysqli(...$config)) {

    die("MySQL Connection Error: <b>Check config values</b>");  // $con->connect_error

}


$query = "SELECT cat.CategoryName, cat.id,

                 writ.Writter, writ.writterdescription,

                 writ.PostingDate, writ.UpdationDate, writ.WritterId

          FROM tblwritter AS writ

          JOIN tblcategory AS cat ON writ.CategoryId = cat.id

          WHERE writ.Is_Active = 1

            AND writ.WritterId = ?"

if (!$stmt = $con->prepare($query)) {

    echo "Prepare Error: ";  // $con->error

} elseif (!$stmt->bind_param("i", $_GET['scid']) ||

          !$stmt->execute() ||

          !$stmt->bind_result($catname,

                              $catid,

                              $writtername,

                              $writterdescription,

                              $writterpostingdate,

                              $writterupdationdate,

                              $writterid)) {

    echo "Statement Error: "; // $stmt->error

} elseif (!$stmt->fetch()) {

    echo "[No qualifying row found]";

}

$stmt->close();


$catid = $catid ?? 0;


$query = "SELECT id, CategoryName

          FROM tblcategory

          WHERE Is_Active = 1

            AND id != ?";

if (!$stmt = $con->prepare($query)) {

    echo "Prepare Error: "; // $con->error

} elseif (!$stmt->bind_param("i", $catid) ||

          !$stmt->execute() ||

          !$stmt->bind_result($id, $name)) {

    echo "Statement Error: "; // $stmt->error

} else { ?>

    <div class="form-group">

        <label class="col-md-2 control-label">Category</label>

        <div class="col-md-10">

            <select class="form-control" name="category" required>

                <?php

                if ($catid) {

                    echo '<option value=' , $catid , '>' , htmlentities($catname) , '</option>';

                }

                while ($stmt->fetch()) {

                    echo '<option value=' , $id , '>' , htmlentities($name) , '</option>';

                }

                ?>

            </select>

        </div>

    </div> <?php

}

  • 維護面向對象的 mysqli 語法而不是混合語法。OO 是我的推薦,因為它比程序更簡潔。

  • 我已經標記了我的代碼段,使其全部適合 Stack Overflow 代碼段框,而無需水平滾動。

  • 在查詢中寫入 MySQL 關鍵字時使用全部大寫 - 這將提高可讀性。

  • 使用短表別名(如“cat”和“writ”,這樣您的查詢就不會因字符而變得臃腫

  • 我在流程中包含了一堆檢查點,以幫助您診斷可能出現的任何問題。永遠不要向最終用戶顯示原始錯誤消息——出于安全考慮。

  • 我沒有檢查是否$_GET['scid']存在,我假設您在其他地方這樣做。如果由于某種原因提交的 scid 值不返回任何符合條件的行,則將其默認為零。這將允許下一個查詢一致地工作。

  • 我更改了您的第二個查詢,以便它不會在選擇字段中再次提供 scid 值。

  • 如果在數據庫中找到 $catid,它將在選擇字段中顯示為第一個選項。

  • 只要數據庫列是 INT 數據類型(它應該是),就value不需要在選項標簽中作為屬性寫入的整數值htmlentities()。我還刪除了整數上的雙引號,因為它們不是必需的。


查看完整回答
反對 回復 2022-01-02
  • 1 回答
  • 0 關注
  • 162 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號