php函数与mysqli

3duebb1j  于 2021-06-17  发布在  Mysql
关注(0)|答案(4)|浏览(262)

这是我的fonction.php:

<?php
function connect(){

$servername = "localhost";
$username = "xxx";
$password = "xxxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

                                }

}
?>

但当我想调用此函数时,它不适用于我的代码:

<?php
include("fonctions.php");
?>

<html>

        <form name="inscription" method="post" action="form.php">
            xxx : <input type="text" name="xxx"/> <br/>
            xxx: <input type="text" name="xxx"<br/>
            <input type="submit" name="valider" value="OK"/>
        </form>

        <?php

        if (isset ($_POST['valider'])){

            $titre=$_POST['xxx'];
            $auteur=$_POST['xxx'];

        connect();

            $sql = 'INSERT INTO xxx (`xxx`, `xxx`) VALUES("'.$xxx.'","'.$xxx.'")';

}
        ?>
    </body>
</html>

在我使用mysql\u connect之前,我的想法是这样的:

<?php
function connect(){
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('MaBase', $base) ;
}
?>

用mysql参数创建一个好的include的最佳方法是什么?谢谢大家的帮助。

kuhbmx9i

kuhbmx9i1#

应该是,

<?php
function connect(){

$servername = "localhost";
$username = "xxx";
$password = "xxxx";
$dbname = "xxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
    return false;
}else{
    return $conn;
}

}
?>

你的问题应该是,

<?php

            if (isset($_POST['valider'])){

                $titre=$_POST['xxx'];
                $auteur=$_POST['xxx'];

                $connection = connect();

                if($connection != false){
                $sql = 'INSERT INTO xxx (`xxx`, `xxx`) VALUES("'.$xxx.'","'.$xxx.'")';
                $result=$connection->query($sql);

                 if($result){ 
                   echo "done"; 
                 }else{
                   echo "faild";
                 }                

                }

          }
   ?>

你应该去参观/学习oop的基本知识

erhoui1w

erhoui1w2#

上面的答案似乎都漏掉了,你有两个同名的变量:

$sql = 'INSERT INTO xxx (`xxx`, `xxx`) VALUES("'.$xxx.'","'.$xxx.'")';

两者都称为$
如果您认为公共变量的名称不应该在这里公开显示,并将它们更改为“”,那么请编辑您的问题,不要将它们更改为相同的名称(例如更改为$name和$password)

jdgnovmf

jdgnovmf3#

在sql语句中使用变量时,包括关于使用pdo或mysqli的强制性语句和准备好的语句。。。
您没有向函数传递要使用的sql语句,也没有定义 $sql 在函数中。

function connect($sql){

定义它,然后再调用它

$sql_statement="select foo from bar where bee=1";
$res=connect($sql_statement);

您还需要函数返回某种值。
我所做的是创建一个通用函数,它接受一个sql语句和一个位置参数数组,然后该函数使用pdo和prepared语句使用这些参数执行查询,然后返回一个包含适当数据的数组$ret[0]是表示成功的bool,如果为false,则[2..n]包含错误消息,如果为true,则[2..n]包含select的返回记录集,受更新、删除影响的行数,以及insert语句的最后一个插入id(通过在查询字符串上使用正则表达式检测)
写一次,然后 require_once() 在我工作的大学里有15个网络应用程序。

ezykj2lf

ezykj2lf4#

对此,我建议你使用面向对象的方法,我只是建议你用我自己的方法,你可以尝试不同的方法,在我的答案没有问题,我使用两个类第一类做所有的数据库连接和mysqli真正的转义转换和人员其他类是查询类它的处理所有的查询人员
database.class.php//数据库连接

class DatabaseConnections{
      function connect($databaseNaem){

        try{

          return $connection=mysqli_connect("localhost","user","password",'database');

        }catch(Exception $e){
          echo 'Message:'.$e->getMessage();
        }

      }

      function CloseConnection($dataObject){
        if(mysqli_close($dataObject)){
          return 1;
        }else{
          echo "coudn't Close the Database Connection";
        }
      }

      function convert($connection , $vari){
        return mysqli_real_escape_string($connection,$vari);
      }
    }

     //queryclass
    class Query{

      function queryNoresult($stmt){
        if($stmt->execute()){
          return 1;
        }

      }

      function queryNumOfRows($stmt){
        $stmt->execute();
        $result = $stmt->get_result();
        return mysqli_num_rows($result);
      }

      function QueryResult($stmt){
        $stmt->execute();

        $result = $stmt->get_result();
        return $result;
      }

      function illcallothers($stmt,$callto){
        if($callto == 1){
          return $this->queryNoresult($stmt);
        }if ($callto==2) {
          return $this->queryNumOfRows($stmt);
        }
        if($callto == 3){
          return $this->QueryResult($stmt);
        }

      }
    }

正如你在结尾看到的,我创建了一个函数调用illcallothers,这个函数只需要2个参数就可以处理你的查询
已创建语句
函数编号
这里面有三个选项
如果调用$query->illcallothers($stmt,1),则只为execute best for delete and insert调用函数,因为如果成功,则返回1
如果您调用$query->illcallothers($stmt,2),这个函数将返回行数,这些行数对于使用while之前检查it数据是否可用是最好的
如果调用$query->illcallothers($stmt,3),这将返回查询的结果集
现在让我们来看看你的问题

//first you have to require the database file

  require_once('database.class.php');

 //Then you have to create object from them

 $mymainObj = new DatabaseConnections();//obj from database

 $connetion = $mymainObj->connect('databasename');//this will return a connection Object
 $stmt = $connection->stmt_init(); //then the statement you need the connection object to this 
 $query = new Query();//object from the query class

    //i am not going to put form part in here it will get messy
      $titre= $mymainObj->convert($connection,$_POST['xxx']);//calling mysqli realescape funciton in databaseconnection 

      $auteur=$mymainObj->convert($connection,$_POST['xxx']);

    //now you have create the sql
     $sql = 'INSERT INTO xxx (`xxx`, `xxx`) VALUES(?,?)';//when using stmt this how we tell mysql that we have this much parameters and then we pass them after preparing

    if($stmt->prepare($sql)){
       $stmt->bind_param('ss',$title,$author);
    if($query->illcallothers($stmt,1)){
     echo "Query Success";
    }

    }

相关问题