如何获得所有的产品?MySQL,PHP

如何获得所有的产品?MySQL,PHP,php,mysql,swift,swift3,alamofire,Php,Mysql,Swift,Swift3,Alamofire,如何获得所有的产品?返回时,我只得到一行。。。 我想键入一个循环来获取MySQL表“listaprodotti”的所有值 这就是我得到的 "prodotti": {"username":"anto","id_prodotto":57,"nome_prodotto":"xxx", "categoria":"xxx","quantita":"2"}} 所有这些都必须通过Swift 3作为NSDictionary调用 更新 如何在Swift 3中以NSDictionar

如何获得所有的产品?返回时,我只得到一行。。。 我想键入一个循环来获取MySQL表“listaprodotti”的所有值

这就是我得到的

     "prodotti":
   {"username":"anto","id_prodotto":57,"nome_prodotto":"xxx",
       "categoria":"xxx","quantita":"2"}}
所有这些都必须通过Swift 3作为
NSDictionary
调用

更新

如何在Swift 3中以
NSDictionary
的形式获取值

PHP代码

  public function getProdottiByUsername($username)
{
    $stmt = $this->conn->prepare("SELECT username, id_prodotto, nome_prodotto, categoria, quantita  FROM listaprodotti WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    $i=0;
    $prodotti = array();
    while($row = $result->fetch_array(MYSQLI_ASSOC)){
        $prodotti[$i]['username'] = $row['username'];
        $prodotti[$i]['id_prodotto'] = $row['id_prodotto'];
        $prodotti[$i]['nome_prodotto'] = $row['nome_prodotto'];
        $prodotti[$i]['categoria'] = $row['categoria'];
        $prodotti[$i]['quantita'] = $row['quantita'];
        $i++;
    }
     return $prodotti;
    }

    }
SWIFT代码

   import Alamofire
   import UIKit
    import AVFoundation

   class LoginController1: UIViewController {

//The login script url make sure to write the ip instead of localhost
//you can get the ip using ifconfig command in terminal
let URL_USER_LOGIN = "http://.............../login.php"

//the defaultvalues to store user data
let defaultValues = UserDefaults.standard

//the connected views
//don't copy instead connect the views using assistant editor
@IBOutlet weak var labelMessage: UILabel!
@IBOutlet weak var username: UITextField!

@IBOutlet weak var password: UITextField!

//the button action function
@IBAction func buttonLogin(_ sender: UIButton) {

    //getting the username and password
    let parameters: Parameters=[
        "username":username.text!,
        "password":password.text!
    ]

    //making a post request
    Alamofire.request(URL_USER_LOGIN, method: .post, parameters: parameters).responseJSON
        {
            response in
            //printing response
            print(response)

            //getting the json value from the server
            if let result = response.result.value {
                let jsonData = result as! NSDictionary

                //if there is no error
                if(!(jsonData.value(forKey: "error") as! Bool)){

                    //getting the user from response
                    let user = jsonData.value(forKey: "user") as! NSDictionary


                    //getting user values
                    let userId = user.value(forKey: "id") as! Int
                    let userName = user.value(forKey: "username") as! String
                    let userEmail = user.value(forKey: "email") as! String
                    let userNome = user.value(forKey: "nome") as! String
                    let userCognome = user.value(forKey: "cognome") as! String
                    let userTelefono = user.value(forKey: "telefono") as! String



                    //saving user values to defaults
                    self.defaultValues.set(userId, forKey: "userid")
                    self.defaultValues.set(userName, forKey: "username")
                    self.defaultValues.set(userEmail, forKey: "useremail")
                    self.defaultValues.set(userNome, forKey: "usernome")
                    self.defaultValues.set(userCognome, forKey: "usercognome")
                    self.defaultValues.set(userTelefono, forKey: "usertelefono")


                    ///prende i valori dei prodotti dalla cella legata a quel username
                    let prodotti = jsonData.value(forKey: "row") as! NSDictionary 



                    let prodottiNome_prodotto = prodotti.value(forKey: "nome_prodotto") as! String
                    let prodottiCategoria = prodotti.value(forKey: "categoria") as! String
                    let prodottiQuantita = prodotti.value(forKey: "quantita") as! String



                    //saving i valori di questo username


                    self.defaultValues.set(prodottiNome_prodotto, forKey: "nome_prodotto")
                    self.defaultValues.set(prodottiCategoria, forKey: "categoria")
                    self.defaultValues.set(prodottiQuantita, forKey: "quantita")



                    //Go to the HomeViewController if the login is sucessful
                    let ProfiloController = self.storyboard?.instantiateViewController(withIdentifier: "Profilo") as! ProfiloController
                    self.navigationController?.pushViewController(ProfiloController, animated: true)

                    self.dismiss(animated: false, completion: nil)

                    }else{
                                            //error message in case of invalid credential
                    let alertController = UIAlertController(title: "Error", message: "Username e password sbagliati", preferredStyle: .alert)
                    let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                    alertController.addAction(defaultAction)

                    self.present(alertController, animated: true, completion: nil)
                    }
            }
                }
}






override func viewDidLoad() {
    super.viewDidLoad()
    if defaultValues.string(forKey: "username") != nil{
        let ProfiloController = self.storyboard?.instantiateViewController(withIdentifier: "Profilo") as! ProfiloController
        self.navigationController?.pushViewController(ProfiloController, animated: true)

    }
}


    var player: AVPlayer?
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)





    let tap = UITapGestureRecognizer(target: self, action: #selector(LoginController1.dismissKeyboard))
    view.addGestureRecognizer(tap)
    let path = Bundle.main.path(forResource: "introoiphone 7 plus", ofType: "mp4")
    player = AVPlayer(url: URL(fileURLWithPath: path!))
    player!.actionAtItemEnd = AVPlayerActionAtItemEnd.none;
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.frame
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    self.view.layer.insertSublayer(playerLayer, at: 0)
    NotificationCenter.default.addObserver(self, selector: #selector(LoginController1.playerItemDidReachEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player!.currentItem)
    player!.seek(to: kCMTimeZero)
    player!.play()

}

func playerItemDidReachEnd() {
    player!.seek(to: kCMTimeZero)
}



func dismissKeyboard(tap: UITapGestureRecognizer) {
    print("Keyboard Dismiss Again")
    view.endEditing(true)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
 }

  }

您需要使用fetchAll而不是fetch


您需要使用fetchAll而不是fetch


您可以在循环中调用结果,否则它只取第一行:

$result = $stmt->get_result();
$i=0;
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $prodotti[$i]['username'] = $row['username'];
    $prodotti[$i]['id_prodotto'] = $row['id_prodotto'];
    $prodotti[$i]['nome_prodotto'] = $row['nome_prodotto'];
    $prodotti[$i]['categoria'] = $row['categoria'];
    $prodotti[$i]['quantita'] = $row['quantita'];
    $i++;
}

您可以在循环中调用结果,否则它只取第一行:

$result = $stmt->get_result();
$i=0;
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $prodotti[$i]['username'] = $row['username'];
    $prodotti[$i]['id_prodotto'] = $row['id_prodotto'];
    $prodotti[$i]['nome_prodotto'] = $row['nome_prodotto'];
    $prodotti[$i]['categoria'] = $row['categoria'];
    $prodotti[$i]['quantita'] = $row['quantita'];
    $i++;
}

你需要改变很多。首先,您的数组结构只为一维设置,其次,您需要循环fetch()来检索每一行。首先,您的数组结构只为一维设置,其次,您需要循环fetch()来检索每一行。我得到以下错误:调用未定义的方法mysqli_stmt::fetchAll()第7行,即使它是PDO,这并没有真正的帮助,因为代码的其余部分没有设置为存储额外的值。我的错误是,我认为使用mysqli的$stmt->fetch_array()。如果可能的话,我建议使用PDO而不是mysqli来切换。现在我如何在Swift 3中获得值?作为一个例子,我得到了这个错误:调用未定义的方法mysqli_stmt::fetchAll()第7行即使它是PDO,这也没有真正的帮助,因为代码的其余部分没有设置为存储额外的值。我的错误是,我相信它是$stmt->fetch_array()使用mysqli。如果可能的话,我建议使用PDO而不是mysqli来切换。现在我如何在Swift 3中获得值?作为感谢,现在我如何获得Swift 3中的值?作为感谢,现在我如何获得Swift 3中的值?作为一本词典
$result = $stmt->get_result();
$i=0;
while($row = $result->fetch_array(MYSQLI_ASSOC)){
    $prodotti[$i]['username'] = $row['username'];
    $prodotti[$i]['id_prodotto'] = $row['id_prodotto'];
    $prodotti[$i]['nome_prodotto'] = $row['nome_prodotto'];
    $prodotti[$i]['categoria'] = $row['categoria'];
    $prodotti[$i]['quantita'] = $row['quantita'];
    $i++;
}