我是MySQL和PHP的新手,我正在尝试创建自己的CMS,以帮助您更轻松地管理我的网站.有人可以解释mysqli的close()功能吗?
mysqli::store_result()和之间有什么区别mysqli::use_result()?
PHP.net上的文档似乎对两者之间的差异非常模糊.该mysqli::use_result()-page不提供任何代码样本,您链接到mysqli::multi_query()页随机寻找他们.在该页面中,给出了以下代码示例(请参阅完整代码页面):
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
Run Code Online (Sandbox Code Playgroud)
该mysqli::store_result()-page使用完全相同相同的代码样本,但有一个例外:
/* store first result set */
if ($result = $mysqli->use_result()) {
Run Code Online (Sandbox Code Playgroud)
是的...... store_result成了use_result.请注意,即使上面的评论仍然说"商店".
看过代码示例后,我想; "好吧,所以这是别名".可是等等!该文档提供了以下描述:
它们看起来像两个不同的东西,根本不像别名.仔细看看我发现mysqli::use_result()-page 的代码示例中还有另一个例外:$result->free();成了$result->close();.然而,当我发现在第二个代码示例(程序等效)中的同一页上使用时,我发现真相的希望很快就被破坏了 …
好的,这是一个奇怪的问题,所以请在我解释时请耐心等待.
我们将开发服务器从PHP 5.2.5升级到5.3.1.
在切换后加载我们的代码,我们开始得到如下错误:
Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in /home/spot/trunk/system/core/Database.class.php on line 105
提到的(105)行如下:
call_user_func_array(Array($stmt, 'bind_param'), $passArray);
Run Code Online (Sandbox Code Playgroud)
我们将该行更改为以下内容:
call_user_func_array(Array($stmt, 'bind_param'), &$passArray);
Run Code Online (Sandbox Code Playgroud)
此时(因为allow_call_time_pass_reference)被关闭,php抛出这个:
Deprecated: Call-time pass-by-reference has been deprecated in /home/spot/trunk/system/core/Database.class.php on line 105
在尝试解决这个问题一段时间之后,我崩溃了并且开始allow_call_time_pass_reference了.
这摆脱了Deprecated警告,但现在Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference每次都会发出警告,无论有没有引用.
我不知道如何解决这个问题.如果目标方法是我自己的,我只会在func声明中引用传入的变量,但它是一个(相对)本机方法(mysqli).
有没有人经历过这个?我怎么能绕过它呢?
谢谢.
我在数据库端有什么需要做的,还是只是改变的php?我可以用mysqli函数代替mysql函数吗?还有什么我应该知道的吗?
新的mysqli和有什么区别mysqli_connect?我知道执行查询是不同的;
例如:mysqli->query()和mysqli_query()
为什么有两种不同类型的,什么是需要区别?
所以我只是在学习数据库,我希望能够存储用户输入.有人能给我一个基本的例子来说明如何使用php获取表单数据并将其保存到数据库中吗?还使表单免受sql攻击
我正在尝试编写一个函数,它将使用mysqli检查数据库中的单个值,而不必将其放在数组中.除了我在这里做的事情,我还能做什么?
function getval($query){
$mysqli = new mysqli();
$mysqli->connect(HOST, USER, PASS, DB);
$result = $mysqli->query($query);
$value = $mysqli->fetch_array;
$mysqli->close();
return $value;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试执行一些查询以获取有关某些图像的信息页面.我写了一个函数
function get_recent_highs($view_deleted_images=false)
{
$lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1));
$query = "SELECT image_id, date_uploaded FROM `images` ORDER BY ((SELECT SUM( image_id=`images`.image_id ) FROM `image_votes` AS score) / (SELECT DATEDIFF( NOW( ) , date_uploaded ) AS diff)) DESC LIMIT " . $this->page_size . " OFFSET $lower"; //move to database class
$result = $this->database->query($query);
$page = array();
while($row = $result->fetch_assoc())
{
try
{
array_push($page, new Image($row['image_id'], $view_deleted_images));
}
catch(ImageNotFoundException $e)
{
throw $e;
}
}
return $page;
}
Run Code Online (Sandbox Code Playgroud)
根据其受欢迎程度选择这些图像的页面.我编写了一个Database …
谁能告诉之间的区别mysqli->commit和mysqli::commit?
此页面中的标题是mysqli::commit,但在他们使用的示例中mysqli->commit.
这必须是一个新手的错误,但我没有看到它.以下是我的代码中的代码段:
$mysqli = mysqli_connect($dbCredentials['hostname'],
$dbCredentials['username'], $dbCredentials['password'],
$dbCredentials['database']);
if ($mysqli->connect_error) {
throw new exception( 'Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT DISTINCT model FROM vehicle_types
WHERE year = ? AND make = '?' ORDER by model");
$stmt->bind_param('is', $year, $make);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)
当我回显$ year和$ make的值时,我看到了值,但是当我运行这个脚本时,我得到一个空值,并且我的日志文件中出现以下警告:
PHP Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
Run Code Online (Sandbox Code Playgroud)
在这种情况下,year在数据库中的类型为int(10),并且我已经尝试传递一个已经转换为int的副本,而make是一个带有utf8_unicode_ci编码的varchar(20).我错过了什么吗?