我正在努力学习在PHP中使用mysqli的预处理语句,通常,如果我遇到查询问题,我只需将它回显到屏幕上,看看它的第一步看起来是什么样子.
如何用准备好的声明做到这一点?
我希望在替换变量后看到SQL语句.
想象一下,我们有一个查询:
SELECT * FROM somewhere WHERE `id` IN(1,5,18,25) ORDER BY `name`;
Run Code Online (Sandbox Code Playgroud)
以及要获取的ID数组: $ids = array(1,5,18,25)
准备好的陈述,建议准备一个陈述并多次调用:
$stmt = $mysqli->prepare('SELECT * FROM somewhere WHERE `id`=?;');
foreach ($ids as $id){
$stmt->bind_params('i', $id);
$stmt->exec();
}
Run Code Online (Sandbox Code Playgroud)
但现在我必须手动对结果进行排序.我有什么好的选择吗?
我有一个我以前用于脚本的函数.openDBConn()而closeDBConn()这些都被称为mysql_connect()功能.使用如下所示
openDBConn();
$car_model = getCarModel($car_id);
$car_color = getCarColor($car_id);
closeDBConn();
Run Code Online (Sandbox Code Playgroud)
这样做也允许我做以下事情
openDBConn();
mysqlStartTranscation();
upgradeCarColor($car_id);
addNewWing($car_id);
mysqlCommit();
closeDBConn();
Run Code Online (Sandbox Code Playgroud)
现在的困境是,如果我转移到mysqli,我将需要传递连接链接.
我还看到mysql_*被弃用了我的问题:
我有一个功能,这样做:
function registerUser($firstName, $lastName, $address, $postcode, $email, $password)
{
$params = array($firstName, $lastName, $address, $postcode, $email, $password);
$result = $this->db->bind("INSERT INTO Users VALUES (?, ?, ?, ?, ?, ?)", 'ssssss', $params);
}
Run Code Online (Sandbox Code Playgroud)
哪个发送到我的数据库类,它执行此操作:
public function bind($query, $type, $params)
{
$this->query = $query;
$stmt = $this->mysqli->prepare($this->query);
$stmt->bind_param($type, $param);
$stmt->execute;
}
Run Code Online (Sandbox Code Playgroud)
问题是这不起作用.
我希望做的是获取$params列表并将其列在之后$type,以便查询类似于:
$stmt->bind_param('ssssss', $firstName, $lastName, $address, $postcode, $email, $password);
Run Code Online (Sandbox Code Playgroud)
但显然我的方式是错误的.
有没有办法让数组......按原样转换成一个列表,在bind_param查询阶段打印出来?
对于这个查询,有必要使用mysql_real_escape_string吗?
任何改进或查询都没问题?
$consulta = $_REQUEST["term"]."%";
($sql = $db->prepare('select location from location_job where location like ?'));
$sql->bind_param('s', $consulta);
$sql->execute();
$sql->bind_result($location);
$data = array();
while ($sql->fetch()) {
$data[] = array('label' => $location);
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,查询速度很重要.
我在Ubuntu 10.04中遇到PHP问题.当我尝试使用mysqli_result :: fetch_all时出现此错误:
调用未定义的方法mysqli_result :: fetch_all()
但是,它适用于Windows XP.
代码:
$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);
Run Code Online (Sandbox Code Playgroud)
我不想在循环中使用fetch_assoc,因为我将结果发送到另一个层进行处理.
我使用的是PHP 5.4.4.和php -m | grep mysql mysqlnd模块它没有出现.我该如何安装?这可能是问题吗?
嗨,我正在尝试学习使用预准备语句的正确方法,以避免SQL注入等.
当我执行脚本时,我从我的脚本中得到一条消息,说0行已插入,我希望这可以说1行插入,当然更新表.我对我准备好的陈述并不完全确定,因为我做了一些研究,我的意思是它因例子而异.
当我更新我的表时,我需要声明所有字段还是只更新一个字段?
任何信息都会非常有用.
的index.php
<div id="status"></div>
<div id="maincontent">
<?php //get data from database.
require("classes/class.Scripts.inc");
$insert = new Scripts();
$insert->read();
$insert->update();?>
<form action="index2.php" enctype="multipart/form-data" method="post" name="update" id="update">
<textarea name="content" id="content" class="detail" spellcheck="true" placeholder="Insert article here"></textarea>
<input type="submit" id="update" name="update" value="update" />
</div>
Run Code Online (Sandbox Code Playgroud)
类/ class.Scripts.inc
public function update() {
if (isset($_POST['update'])) {
$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
$id = 1;
/* Bind our params */
$stmt->bind_param('is', $id, $content);
/* Set our params */
$content = isset($_POST['content']) ? $this->mysqli->real_escape_string($_POST['content']) …Run Code Online (Sandbox Code Playgroud) 我想在最终确定准备好的mysqli语句时澄清$ stmt-> close()和$ stmt-> free_result()之间的区别.
到目前为止我使用:
$mysqli = new mysqli(host,user,password,database);
$stmt = $mysqli->prepare(sql statement);
[...]
$stmt->free_result();
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好.
但是我看到很多程序员使用$ stmt-> close而不是$ stmt-> free_result().一旦我看到他们两个:
$stmt->free_result();
$stmt->close();
$mysqli->close();
Run Code Online (Sandbox Code Playgroud)
那么我应该选择什么,在哪种情况下以及为什么?
我收到错误:
Object of class mysqli_result could not be converted to string
这是我的代码:
$username2 = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
$con = mysqli_connect('localhost','root','','test');
$result = mysqli_query($con, "SELECT classtype FROM learn_users
WHERE username='$username2';");
echo "my result <a href='data/$result.php'>My account</a>";
Run Code Online (Sandbox Code Playgroud)