mysqli PHP扩展(“MySQL改进”)是PHP数据库驱动程序,包含自PHP 5以来。它利用了MySQL 4.1.3和更新版本中引入的新功能。
我正在尝试通过 PHP 中的准备好的语句插入一些数据。我有以下代码,但没有为我插入。我也已经设置了以下代码 ini_set('显示错误', 1...
我想创建一个动态选择语句,可以选择我要求的任何表,与我的数据库中的表列相同。 这是到目前为止我选择的课程: 我想创建一个动态选择语句,可以选择我要求的任何表,与我的数据库中的表列相同。 这是我迄今为止选择的课程: <?php class select extends database{ // Instance variables private $id; public $table; public $column; public $sql; public $result = array(); // Methods - Behavior public function selectQuery($table){ global $con; $sql = $this->sql; $sql = "SELECT * FROM {$table}"; $result = $this->con->query($sql); while($row = $result->fetch_object()){ //iterate all columns from the selected table //and return it someway. } } } $selectQuery = new select(); 这是我的数据库类 require_once(LIB_PATH.DS."config.php"); class database { public $con; public $result = array(); public function __construct() { $this->con = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD,DB); if($this->con->connect_error){ die($this->con->connect_error); } } } $db = new database(); 到目前为止我所做的是使用 mysqli 连接到我的数据库,然后我从数据库类扩展我的选择类,这样我就可以获得连接,然后我想从中选择所有内容。 首先,你的 select 类正在扩展 database 类,所以没有必要在 public $result = array(); 类中重新声明 select,实际上甚至没有必要。 其次,由于您没有在类之外使用对象属性,因此请将它们设为 private。 最后,由于您要处理可变数量的参数,请使用 func_get_args() 函数。 参考资料如下: func_get_args() 根据您的要求,解决方案是将可变数量的参数发送到 selectQuery() 方法,并使用 func_get_args() 获取包含函数参数列表的数组。 第一个参数是表名称,其余参数是列名称(如果提供) 如果仅向函数传递一个参数,则 SELECT 查询将是 SELECT * FROM table_name 如果向函数传递多个参数,则 SELECT 查询将是 SELECT column1, column2, column3, ... FROM table_name 所以你的代码应该是这样的: require_once(LIB_PATH.DS."config.php"); class database { public $con; public function __construct() { $this->con = new mysqli(DB_HOST,DB_USERNAME,DB_PASSWORD,DB); if($this->con->connect_error){ die($this->con->connect_error); } } } class select extends database{ // Instance variables private $table; private $columns; private $sql; // Methods - Behavior public function selectQuery(){ // incrementally construct the query $this->sql = "SELECT "; // get the argments passed to the function $this->columns = func_get_args(); // the first argument would be the table name and rest of the arguments are column names (if provided) $this->table = $this->columns[0]; // if only one argument is passed to the function, // then SELECT query would be SELECT * FROM table_name if(count($this->columns) == 1){ $this->sql .= "* "; }else{ // if more than one argument is passed to the function, // then the SELECT query would be SELECT column1, column2, column3, ... FROM table_name for($i = 1; $i < count($this->columns); ++$i){ $this->sql .= $this->columns[$i] . ","; } // remove the last , from the $sql string $this->sql = rtrim($this->sql, ","); } $this->sql .= " FROM $this->table"; // execute the query $result = $this->con->query($this->sql); // return the result set return $result; } } $obj = new select(); $table = "YOUR_TABLE_NAME"; $column1 = "COLUMN_1"; $column2 = "COLUMN_2"; $result = $obj->selectQuery($table, $column1, $column2); while($row = $result->fetch_assoc()){ // display it echo $row[$column1] . " " . $row[$column2] . "<br />"; } $result = $obj->selectQuery($table); while($row = $result->fetch_assoc()){ // display it } 这个很简单 function conx(){ $link = new mysqli($db_host, $db_user, $db_pass, $db_name); if ($link->connect_error) { die("Connection failed: " . $link->connect_error); } $sql = "SET NAMES utf8"; $result = $link->query($sql); return $link; } 现在你有了一个连接,让我们传递一个 $table 值 $link = conx(); $sql = "SELECT * FROM $table"; <------ REMOVE {} from your table var!Worked for me $result = $link->query($sql); if(!$result) {echo 'Failed to query';}; if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo $row["title"]; } } else { echo "0 results"; } $link->close(); } 这是最基本的! 实际上 - 我认为你离得并不远;暂时忽略命名空间或任何特定的设计模式,存在一些范围缺陷,但是...... 让我们假设一个目录结构,其中包含类和应用程序文件(例如index.php)以将它们粘合在一起: /class/Database.php <?php class Database { protected $con; public function __construct() { $this->con = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB); //error trapping if($this->con->connect_error) { die($this->con->connect_error); } //ok set charset; should add error trapping here too else { $this->con->set_charset('UTF8'); //probably } } } /class/Select.php <?php class Select extends Database { // Class Members private $id; public $table; public $column; public $sql; public $result = array(); // Methods - Behavior public function __construct() { parent::__construct(); } public function selectQuery($table) { //since there's a $table class member... $this->table = $this->con->real_escape_string($table); //query string $sql = "SELECT * FROM {$this->table}"; //should be some error trapping here $response = $this->con->query($sql); //result while($row = $response->fetch_object()) { $this->result[] = $row; } //return return $this->result; } } index.php <?php //require is a language construct not a function // - it doesn't need parentheses require_once LIB_PATH.DS . 'config.php'; require_once '/path/to/class/Database.php'; require_once '/path/to/class/Select.php'; //build the object and run the query $s = new Select; // this should hold your resultset as an array of objects // though it would also be accessible via $s->result since // that's a public class member $r = $s->selectQuery('my_table'); 这一切都非常简单,不太实用(但你说这是为了考试,所以......)。 实际上,您可能不想为每个查询启动新的数据库连接,因此可能值得查看 static 类成员:http://php.net/manual/en/language.oop5.static .php ...或单例模式(尽管您可能需要也可能不需要单例数据库连接):http://www.phptherightway.com/pages/Design-Patterns.html ...也是封装,public类成员(通常)不是可取的:PHP中的简单示例封装是什么? db_connection.php class db{ private $db_host = ''; private $db_user = 'user'; private $db_pass = 'pass'; private $db_name = 'your database name'; protected $con; public function __construct(){ $this->con = new mysqli($this->db_host,$this->db_user,$this->db_pass,$this->db_name); if ($this->con -> connect_errno) { echo "Failed to connect to MySQL: " . $this->con -> connect_error; exit(); } return false; } } 查询.php require 'db_connection.php'; class query extends db{ public function select($tableName,$column = null,$clause = null){ $columns = null; if ($column == null) { $columns = '*'; }else{ $values = Array(); foreach($column as $key => $value){ array_push($values,"$value"); } $columns = join(',',$values); } $select = null; $select .= "SELECT ".$columns." FROM {$tableName} "; if ($clause != null) { $select .= $clause; } $s_sql = $this->con->prepare($select); $s_sql->execute(); // It will return mysqli_stmt Object return $s_sql; } } $s 将返回 mysqli_stmt 对象。 index.php $query_ob = new query(); // The first parameter is required And other parameters is optional. // The second parameter must be Array[]. $s = $query_ob->select(parameter1,parameter1,parameter3); $r = $s->get_result(); while ($f = $r->fetch_assoc()) { // code here } $t->close();
我试图将 MySQLi 查询错误转换为异常,但不能 - 仅当无法连接数据库时才会抛出 mysqli_sql_exception。 我使用 mysqli_report(MYSQLI_REPORT_STRICT) 和程序 My...
我的网站包含超过 60,000 种产品,我每周都会从制造商处获得更新,我需要处理这些更新,以便更新我的网站。我有 php 代码来加载各种相关表。 我有两个
我可以强制 mysqli 函数返回错误代码而不是抛出异常吗?
我维护了一个网站,不久前用 PHP 编写。它的大多数功能依赖于返回错误,而不是捕获异常。像这样的东西: (注:完全可以接受的东西......
mysqli::query():无法获取 mysqli / mysqli 对象已关闭
警告:mysqli::query():无法在 C:\Program Files (x86)\EasyPHP-DevServer-13.1VC9\data\localweb\my 便携式文件中获取 mysqli
通过 PHP 提交注册表时出现 HTTP ERROR 405。有什么办法可以解决这个问题吗?
所以最近我一直在尝试为我的网站(使用 html、css 和 js)创建一个实际上有效的注册表单,每当我输入一些信息并点击提交时,我就会被重定向到...
我正在使用 Mysqli 和 multi_query 在数据库表中更新或插入多行。当我在本地 MAMP 服务器上使用它们时,它们工作正常,但当我将它们放到网上时,它们就会崩溃。在遥控器上
我在用户表中有金额字段。我想通过使用 FOR 循环来获取所有内容。但我返回错误的数据。所有的东西都清楚地显示在图片中。 我在 amount 表中有 users 字段。我想通过使用 FOR 循环来获取所有内容。但我返回错误的数据。所有东西都清楚地显示在图片中。 <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/walletbot/database.php"; $user_amount = $connection->query("SELECT `amount` FROM `users` WHERE `amount` BETWEEN 1000 AND 30000"); $user_amount = $user_amount->fetchAll(); for ($i=0; $i<count($user_amount) -1; $i++) { try { $user_amount = $user_amount[$i]['amount']; echo $user_amount; echo "<br>"; } catch (PDOException $e) { echo $e->getMessage(); } } $connection = null; 我尝试使用 for 循环获取数据。这是代码的结果。正如你所看到的,它只给我返还了 2500 和 5。 我该如何解决? 问题出在 $user_amount 变量上。您正在将 $user_amount 重新分配给当前金额值,这会更改您的初始值。 我还注意到您的循环条件有问题,并且不会迭代整个数组。根据给定的代码,您的循环由于 count($user_amount) - 1 而提前停止一次迭代。 这是更正后的版本 <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/walletbot/database.php"; $query = $connection->query("SELECT `amount` FROM `users` WHERE `amount` BETWEEN 1000 AND 30000"); $user_amounts = $query->fetchAll(); for ($i = 0; $i < count($user_amounts); $i++) { try { $amount = $user_amounts[$i]['amount']; // Used a different variable here echo $amount; echo "<br>"; } catch (PDOException $e) { echo $e->getMessage(); } } $connection = null; ?>
您好! 我有一个在付费 VPS 上运行的网络应用程序。那里没问题。我正在将此应用程序移至我自己的专用服务器。 当前云服务器-CS-: Centos 6 x86_64; 2 GB 内存; 2 个虚拟CPU 虚拟专用
我用PHP和mysql制作了考勤管理系统。数据已成功检索,但是当我想要合并周日或假日的行时,它将其他列移到其后一位。 我正在尝试...
您能告诉我为什么我的 SQL 注入不起作用以及如何修复它吗?我尝试遵循此处的示例,但很有价值'); DROP TABLE table;-- 或密码 1=1 不起作用。很抱歉
我最初创建了以下查询来从数据库返回一些结果。 $result = mysqli_query($con, "选择 bookingId, locationName 来自预订 ...
通过 MySQL 根据订单项目 ID 更新 WooCommerce 订单状态
我尝试使用以下 SQL 查询根据订单项 ID 更新 WooCommerce 订单状态: 更新 wp_posts 设置 post_status = 'wc-completed' 来自 wp_posts 左加入 wp_postmeta ON wp_...
使用 mysql 查询根据订单项 ID 更新 woocommerce 订单状态
我使用以下代码来更新订单状态,但它给出了错误,我错了 更新 wp_posts 设置 post_status = 'wc-completed' 来自 wp_posts 左加入 wp_postmeta ON wp_...
使用 mysql 查询根据订单 ID 更新 woocommerce 订单状态
我使用以下代码来更新订单状态,但它给出了错误,我错了 更新 wp_posts 设置 post_status = 'wc-completed' 来自 wp_posts 左加入 wp_postmeta ON wp_...
您好我正在尝试创建一个登录系统,我在后端的技能非常有限。我使用教程创建了一个数据库,意识到我其他页面上的所有 php 都使用了 pdo,其中
我有一份已提交的车辆检查清单。检查按日期进行组织和分组。该表显示了日期以及提交支票的人。当我点击查看时,它应该显示所有检查...
MySQL 在服务器上返回语法错误,但在另一台服务器上不返回语法错误
我运行这个查询已经很多年了,现在它抛出了一个语法错误。 我知道查询似乎很容易修复,但我想知道配置中的哪个选项负责此语法错误...
我想通过相对用户id获取订单id最大值 $order_id =“从products_orders中选择*,其中order_user_id = $user_id AND MAX(order_id)”; $ord_del = mysqli_query($con,$or...