在我的上一个项目中,我使用foreach循环为每个 mysqli 结果分配了一个变量,例如$r->mydata,但我不小心格式化了我的电脑,所以我丢失了我的核心文件,我不记得我是怎么做到的。我记得我做过这样的事情
$result = $db->query("SELECT * FROM data");
if($result->num_rows){
while ($row = $result->fetch_object()) {
foreach ($row as $r){
$row[] = $r;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样从 while 循环外部访问结果:
<?php echo $r->mydata ?>
Run Code Online (Sandbox Code Playgroud)
任何人都可以编辑我的代码,使其像以前一样工作吗?
我想知道哪个更强filter_var或mysqli_real_escape_string.
更具体。
选项1:
//Course Title
$ctitle = trim($_POST['courseTitle']);
$clean_ctitle = filter_var($ctitle, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)
选项2:
//Course Title
$ctitle = trim($_POST['courseTitle']);
$clean_ctitle = mysqli_real_escape_string($con, $ctitle);
Run Code Online (Sandbox Code Playgroud)
我也知道准备好的语句,但我想预先过滤进来的数据。如果有其他选择,请告诉我。
/* 连接文件 */
class dbconnect{
public function connect(){
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'demo';
$connection = mysqli_connect($host,$user,$pass,$db);
return $connection;
}
}
Run Code Online (Sandbox Code Playgroud)
/* dao 文件 */
include 'dbconnect.php';
class dao extends dbconnect{
private $conn;
function __dao(){
$dbcon = new dbconnect();
$conn = $dbcon->connect();
}
function select( $table , $where='' , $other='' ){
if(!$where = '' ){
$where = 'where' . $where;
}
$sele = mysqli_query($this->conn,"SELECT * FROM $table $where $other") or die(mysqli_error($this->conn));
echo $sele;
return …Run Code Online (Sandbox Code Playgroud) 我将任意多语句SQL传递给Mysqli(使用mysqlnd)并检索结果集.SELECT语句可以包含LIMIT子句(或不包含).我需要的是将获取的行限制为1000(硬编码限制).这就是我所拥有的:
define('SAFE_ROWS', 1000); // strict limit
$sql = "SELECT * FROM table1 LIMIT 99999999";
$mysqli->multi_query($sql);
// unbuffered: results are stored at MySQL-side
// and transfer when i call fetch*
$result = $mysqli->use_result();
$rows = [];
while ($row = $result->fetch_array()) {
if (count($rows) >= SAFE_ROWS) {
#############################################
# QUESTION: what i have to do here #
# to skip remaining rows of current result? #
#############################################
break;
}
$rows[] = $row;
}
// As slow as much rows remained …Run Code Online (Sandbox Code Playgroud) 我需要创建一个脚本来遍历 MySQL 的结果并自动返回使用 mysqli 在查询中选择的列名。 注意:我将使用一些伪代码来更容易地解释我的观点。显然是错误的
例如一个CLIENTS包含列的表:
ID, NAME, EMAIL, TELEPHONE, ADDRESS
Run Code Online (Sandbox Code Playgroud)
如果我有疑问:
$result = $mysqli->query("SELECT * FROM CLIENTS WHERE ID = 1");
Run Code Online (Sandbox Code Playgroud)
我需要脚本返回 ID、姓名、电子邮件、电话、地址。
伪代码:
foreach ($result as $column => $value){
echo $column
}
Run Code Online (Sandbox Code Playgroud)
结果:
ID, NAME, EMAIL, TELEPHONE, ADDRESS,
如果查询只是
$result = $mysqli->query("SELECT NAME as N, EMAIL as E FROM CLIENTS WHERE ID = 1");
Run Code Online (Sandbox Code Playgroud)
该脚本应该只返回:
N, E,
Run Code Online (Sandbox Code Playgroud)
有想法吗?
需要帮忙
浏览器写道:解析错误:语法错误,第4行的D:\ php\OSPanel\domains\kek2.net\test.php中的意外'$ connection'(T_VARIABLE)
<? php
$connection = mysqli_connect('127.0.0.1','mysql','','test');
if($connection==false)
{
echo"error<br>";
echo mysqli_connect_error();
exit();
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
// Create Connection
$mysqli = new mysqli($host, $username, $password, $db_name);
//Check connection
if($mysqli->connect_error){
die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected Successfully";
// Retrieve data from database
$result= $mysqli->query("SELECT * FROM scores ORDER BY score DESC LIMIT 10");
Run Code Online (Sandbox Code Playgroud)
基本上我现在需要知道如何处理这些数据.在数据库中我有一个格式:
Column 1: Name
Column 2: HighScore
Run Code Online (Sandbox Code Playgroud)
我试图在表格的网页上显示这个,所以我需要一种我能处理的格式的查询,到目前为止我所拥有的是:
// Start looping rows in mysql database.
while($rows=mysqli_fetch_array($result)){
echo $rows['name'] . "|" . $rows['score'] . "|";
// close while loop
}
Run Code Online (Sandbox Code Playgroud)
但是,我不相信我正在使用mysqli_fetch_array()正确,因为它没有进入while循环.
就像我在$_SESSION['userid']这里做的一样:
function changeEmail($newEmail){
$stmt = $mysqli->prepare("update `users` set `email`=? where `userid`={$_SESSION['userid']} limit 1");
$stmt->bind_param('s',$newEmail);
return $stmt->execute();
}
Run Code Online (Sandbox Code Playgroud)
因为: 的值$_SESSION['userid']是从数据库生成的(通过 auto_increment 整数)所以没有 SQL 注入的风险。另外,我假设连接值比绑定快一点。
这是我在 Stack Overflow 上的第一篇文章。我知道这个问题之前已经被问过很多次了。我经历了很多答案,尝试了所有答案(显然正确的方法除外),但不知道该尝试什么了。
我有一个 SQL 表,其中每一行都有一个“编辑”按钮。单击它时,我将所选行的 id 传递给edit.php. 在那里,我得到它并根据用户从表单输入的 id 更新给定的行。第一列是 id ,它被设置为AUTO_INCREMENT。
附带说明一下,无论我使用WHERE id=$id";还是使用,我都会遇到相同的错误WHERE id='$id'";
我认为最接近正确方法的代码如下,并在代码下方生成错误消息:
<html>
<title>
Video Archiv - New
</title>
<body>
<?php
include("connect.php");
$id=$_GET['id'];
echo "Details von Video #$id editieren:<br /><br />";
if(isset($_POST['update']))
{
$sql = "UPDATE VideoArchiv
SET ('".$_POST["titel"]."','".$_POST["schauspieler"]."')
WHERE id=$id";
$result = mysqli_query($connect,$sql);
if (mysqli_query($connect,$sql) === TRUE)
{
echo "Record updated successfully";
}
else
{
echo "Error updating record: " . $connect->error;
}
}
?>
<form …Run Code Online (Sandbox Code Playgroud) 我维护了一个网站,不久前用 PHP 编写。它的大多数功能依赖于返回错误,而不是捕获异常。像这样的东西:
(注意:在 PHP 的早期版本中这是完全可以接受的行为。)
$tbl_nm = "table_name";
$link = @mysqli_connect($HOSTNAME, $USERNAME, $PASSWD);
if($link !== false)
{
if(@mysqli_select_db($link, $DBNAME))
{
$query = "CREATE TABLE `".$tbl_nm."` (".
$COL_ID." INT AUTO_INCREMENT PRIMARY KEY, ".
$COL_DATE." DATE, ".
$COL_TIME." TIME, ".
$COL_MSG." TINYTEXT".
")";
$res = @mysqli_query($link, $query); //** EXCEPTION RAISED HERE! **
if($res === false)
{
if(mysqli_errno($link) != 1050) //1050 - if table already exists
{
logMySQLErrorReport($link, "Error creating table");
}
}
//....
}
else
{
logMySQLErrorReport($link, "Error setting db");
} …Run Code Online (Sandbox Code Playgroud)