直到最近,我一直在使用mysql*的过程方法.现在我想转向mysqli和面向对象的方法.许多在线资源和书籍都表明,即使在PHP的情况下,OOP也优于程序.在完成一些在线教程之后,我编写了一个连接数据库并选择一个值的小程序.我想知道为什么面向对象的方法更好?加上这是编写OO php网页的正确方法吗?
面向对象的方法
$host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";
@ $db = new mysqli($host, $username, $password, $dbname);
if(mysqli_connect_errno())
{
die("Connection could not be established");
}
$query = "SELECT company_id FROM company_basic_details WHERE company_name = 'ABC'";
$result = $db->query($query);
$total_num_rows = $result->num_rows;
echo "The Results Are : <br>";
while($row = $result->fetch_array())
{
echo $row['company_id'];
}
?>
Run Code Online (Sandbox Code Playgroud)
程序方法
<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "compdb";
@ $db = mysqli_connect($host, $username, …Run Code Online (Sandbox Code Playgroud) 我有一个mysqli查询,我需要格式化为移动应用程序的json.
我已经设法为查询结果生成一个xml文档,但是我正在寻找更轻量级的东西.(请参阅下面的我当前的xml代码)
任何帮助或信息都非常感谢人们!
$mysql = new mysqli(DB_SERVER,DB_USER,DB_PASSWORD,DB_NAME) or die('There was a problem connecting to the database');
$stmt = $mysql->prepare('SELECT DISTINCT title FROM sections ORDER BY title ASC');
$stmt->execute();
$stmt->bind_result($title);
// create xml format
$doc = new DomDocument('1.0');
// create root node
$root = $doc->createElement('xml');
$root = $doc->appendChild($root);
// add node for each row
while($row = $stmt->fetch()) :
$occ = $doc->createElement('data');
$occ = $root->appendChild($occ);
$child = $doc->createElement('section');
$child = $occ->appendChild($child);
$value = $doc->createTextNode($title);
$value = $child->appendChild($value);
endwhile;
$xml_string = $doc->saveXML();
header('Content-Type: …Run Code Online (Sandbox Code Playgroud) 我试图在这个准备好的语句中绑定一个变量,但我一直收到错误:
Call to a member function bind_param() on a non-object
Run Code Online (Sandbox Code Playgroud)
调用该函数,并将变量传递给它.当我将函数更改为仅回显变量时,变量在页面上打印正常,但如果我尝试在此处绑定它,则会收到错误.有人可以帮忙吗?
//CALL FROM PAGE ONE
check($username);
//FUNCTION ON PAGE 2
function check($username){
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
}
Run Code Online (Sandbox Code Playgroud)
我知道这里没有完全写出这个功能,但这应该不是问题.我不明白为什么我收到这个错误.
mysqli::query和之间有什么区别mysqli::real_query?
要么
mysqli_query和之间有什么区别mysqli_real_query?
我有一个mysqli查询与以下代码:
$db_usag->query("UPDATE Applicant SET phone_number ='$phone_number',
street_name='$street_name', city='$city', county='$county', zip_code='$zip_code', day_date='$day_date', month_date='$month_date',
year_date='$year_date' WHERE account_id='$account_id'");
Run Code Online (Sandbox Code Playgroud)
但是,所有数据都是从HTML文档中提取的,所以为了避免错误,我想使用预准备语句.我找到了PHP文档,但没有UPDATE示例
可能重复:
php中的mysql vs mysqli
mysql_* functions和 之间有什么区别 mysqli_* functions?我们不应该使用背后的技术原因mysql_* functions吗?
我在PHP/MySQLi中使用两个预准备语句从mysql数据库中检索数据.但是,当我运行语句时,我得到"命令不同步,你现在无法运行命令"错误.
这是我的代码:
$stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1";
$stmt->bind_param('s', $loweredEmail);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
$stmt->fetch();
$stmt->free_result();
$stmt->close();
while($mysqli->more_results()){
$mysqli->next_result();
}
$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
//This is where the error is generated
$stmt1->bind_param('s', $user_id);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($privileges);
$stmt1->fetch();
Run Code Online (Sandbox Code Playgroud)
我尝试过的:
使用代码:
while($mysqli->more_results()){
$mysqli->next_result();
}
//To make sure that no stray result data is left in buffer between the …Run Code Online (Sandbox Code Playgroud)警告:mysqli :: query():无法在第43行的C:\ Program Files(x86)\ EasyPHP-DevServer-13.1VC9\data\localweb\my portable files\class_EventCalendar.php中获取mysqli
以下是我的连接文件:
<?php
if(!isset($_SESSION))
{
session_start();
}
// Create array to hold error messages (if any)
$ErrorMsgs = array();
// Create new mysql connection object
$DBConnect = @new mysqli("localhost","root@localhost",
NULL,"Ladle");
// Check to see if connection errno data member is not 0 (indicating an error)
if ($DBConnect->connect_errno) {
// Add error to errors array
$ErrorMsgs[]="The database server is not available.".
" Connect Error is ".$DBConnect->connect_errno." ".
$DBConnect->connect_error.".";
}
?>
Run Code Online (Sandbox Code Playgroud)
这是我的班级:
<?php
class EventCalendar …Run Code Online (Sandbox Code Playgroud) 我在mysql_query()整个项目中都使用过; 但我刚刚了解到mysql_PHP 5.5已被弃用,已在PHP 7中删除.
那么,我想知道我是否可以盲目地替换我项目中的所有mysql_功能mysqli_?例如,只需替换mysql_query()为mysqli_query().有不良影响吗?
如何只使用MySQLi获取一个INDEXED行?我现在正在这样做:
$row = $result->fetch(MYSQLI_ASSOC);
$row = $row[0];
Run Code Online (Sandbox Code Playgroud)
还有另外一种方法吗?
我知道mysqli_fetch_row但它没有返回一个关联数组.