MYSQLI查询封装代码请教

keephope 2011-02-09 04:56:29
我想使用mysqli的预处理SQL进行所有SQL的运行,目前卡在了查询上

SQL语句示例如下:select * from message where user_id=?

对于查询结果想自动封装成一个数组$rows

该数组为2维数组

能够做到以下效果

echo $rows[0]["title"]; //显示第一条记录的标题
echo $rows[1]["cons"]; //显示第二条记录的内容

等等

需要对所有表都通用,也就是说,任何查询的SQL都可以调用该方法进行查询,并将结果封装在数组$rows内
...全文
185 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rongstar 2011-08-05
  • 打赏
  • 举报
回复
已经实现mysqli的数据操作封装类,如有需要请联系我,懒的贴代码。给你一个建议,需要对mysqli_result::fectch_array() 函数的结果进行处理,通过变量设置MYSQLI_NUM,MYSQLI_ASSOC 参数选项设置是否显示字段。
keephope 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 kalixi 的回复:]
可以用ec的sql类,就是这样的。
[/Quote]

请举例说明,谢谢。
kalixi 2011-02-10
  • 打赏
  • 举报
回复
可以用ec的sql类,就是这样的。
keephope 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 x1987xiaoxiao 的回复:]
function query() {
....//前面的查询过程忽略,直到得到结果集$rt;
$return = array();
while($row = mysql_fetch_assoc($rt)) {
$return[] = $row;
}
mysql_free_result($rt);
return $return;
}
[/Quote]

理论上没有问题。但是你这里使用的是mysql而不是mysqli

我需要知道的是mysqli内如何写

mysql何必这么麻烦,直接就有方法进行封装了
keephope 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 skyaspnet 的回复:]
引用楼主 keephope 的回复:
我想使用mysqli的预处理SQL进行所有SQL的运行,目前卡在了查询上

SQL语句示例如下:select * from message where user_id=?

对于查询结果想自动封装成一个数组$rows

该数组为2维数组

能够做到以下效果

echo $rows[0]["title"]; //显示第一条记录的标题
ec……
[/Quote]

真的不是那么简单的。

PHP帮助手册翻了好几天了

首先手册上使用的方法是绑定参数

有10个字段就要绑定给10个变量

我可以知道有多少个字段

但是我无法动态的在程序里生成这么多的变量

同时,由于我需要的这个方法是针对多个表公用的

也就不可能指定共计有多少个字段了

退一步来说

就算传递入表名用IF去读取固定的字段数量,那么当遇到数据库表内字段变更的时候

也将会很麻烦,一旦出现问题,会造成比较大的麻烦
skyaspnet 2011-02-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 keephope 的回复:]
我想使用mysqli的预处理SQL进行所有SQL的运行,目前卡在了查询上

SQL语句示例如下:select * from message where user_id=?

对于查询结果想自动封装成一个数组$rows

该数组为2维数组

能够做到以下效果

echo $rows[0]["title"]; //显示第一条记录的标题
echo $rows[1]["cons"];……
[/Quote]

其实使用的就是mysqli的prepare方式来执行数据库操作,比较简单的,参考:


mysqli::prepare
mysqli_prepare
(PHP 5)

mysqli::prepare -- mysqli_prepare — Prepare an SQL statement for execution

说明
面向对象风格

mysqli_stmt mysqli::prepare ( string $query )
过程化风格

mysqli_stmt mysqli_prepare ( mysqli $link , string $query )
Prepares the SQL query, and returns a statement handle to be used for further operations on the statement. The query must consist of a single SQL statement.

The parameter markers must be bound to application variables using mysqli_stmt_bind_param() and/or mysqli_stmt_bind_result() before executing the statement or fetching rows.

参数

link
仅以过程化样式:由 mysqli_connect() 或 mysqli_init() 返回的链接标识。

query
The query, as a string.

Note:

You should not add a terminating semicolon or \g to the statement.


This parameter can include one or more parameter markers in the SQL statement by embedding question mark (?) characters at the appropriate positions.

Note:

The markers are legal only in certain places in SQL statements. For example, they are allowed in the VALUES() list of an INSERT statement (to specify column values for a row), or in a comparison with a column in a WHERE clause to specify a comparison value.

However, they are not allowed for identifiers (such as table or column names), in the select list that names the columns to be returned by a SELECT statement, or to specify both operands of a binary operator such as the = equal sign. The latter restriction is necessary because it would be impossible to determine the parameter type. It's not allowed to compare marker with NULL by ? IS NULL too. In general, parameters are legal only in Data Manipulation Language (DML) statements, and not in Data Definition Language (DDL) statements.



返回值
mysqli_prepare() returns a statement object or FALSE if an error occurred.

范例
Example #1 mysqli::prepare() example

面向对象风格

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

/* bind parameters for markers */
$stmt->bind_param("s", $city);

/* execute query */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($district);

/* fetch value */
$stmt->fetch();

printf("%s is in district %s\n", $city, $district);

/* close statement */
$stmt->close();
}

/* close connection */
$mysqli->close();
?>
过程化风格

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?")) {

/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);

/* execute query */
mysqli_stmt_execute($stmt);

/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);

/* fetch value */
mysqli_stmt_fetch($stmt);

printf("%s is in district %s\n", $city, $district);

/* close statement */
mysqli_stmt_close($stmt);
}

/* close connection */
mysqli_close($link);
?>
以上例程会输出:

Amersfoort is in district Utrecht


PS: 一看就明白了
x1987xiaoxiao 2011-02-09
  • 打赏
  • 举报
回复
function query() {
....//前面的查询过程忽略,直到得到结果集$rt;
$return = array();
while($row = mysql_fetch_assoc($rt)) {
$return[] = $row;
}
mysql_free_result($rt);
return $return;
}

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧