MySQL / Apache Σφάλμα στο ερώτημα PHP MySQL




Παίρνω το ακόλουθο μήνυμα λάθους:



> 
> Δεν επιτρέπεται η πρόσβαση για το χρήστη 'apache' @ 'localhost' (με τον κωδικό: NO)
> 
> 
> 


Όταν χρησιμοποιείτε τον ακόλουθο κώδικα:



```
<?php

include(../includes/connect.php);

$query = SELECT * from story;

$result = mysql_query($query) or die(mysql_error());

echo <h1>Delete Story</h1>;

if (mysql_num_rows($result) > 0) {
    while($row = mysql_fetch_row($result)){
          echo '<b>'.$row[1].'</b><span align=right><a href=../process/delete_story.php?id='.$row[0].'>Delete</a></span>';
      echo '<br /><i>'.$row[2].'</i>';
    }
}
else {
   echo No stories available.;
}
?>

```

Το `connect.php`αρχείο περιέχει MySQL μου συνδέσετε τις κλήσεις που έχουν λεπτή εργασία με μου `INSERT IGNORE` ερωτήματα σε άλλο τμήμα του λογισμικού. Αν έχω σχολιάσει τη `$result = mysql_query`γραμμή, τότε θα περνά από τη δήλωση άλλο. Έτσι, είναι ότι η γραμμή ή το περιεχόμενο του αν.


Έχω ψάξει στο διαδίκτυο για τυχόν λύσεις, και οι περισσότεροι φαίνεται να σχετίζεται με πάρα πολλές συνδέσεις δεδομένων MySQL ή ότι ο χρήστης είμαι συνδεθείτε στο MySQL καθώς δεν έχει άδεια. Έχω ελέγξει και τα δύο. Μπορώ ακόμα να εκτελέσετε άλλες απορίες μου σε άλλα σημεία του λογισμικού, και έχω διαπιστώσει ότι ο λογαριασμός έχει τα κατάλληλα δικαιώματα.
> 
> Και αν έχει σημασία καθόλου, apache @ localhost δεν είναι το όνομα του λογαριασμού χρήστη που χρησιμοποιώ για να πάρει στη βάση δεδομένων. Δεν έχω κανένα λογαριασμό χρήστη με το όνομα apache σε αυτούς καθόλου για το θέμα αυτό.
> 
> 
> 


Αν λέει «apache @ localhost» το όνομα δεν έχει πάρει περάσει σωστά στη σύνδεση MySQL. «Apache» είναι συνήθως ο χρήστης που εκτελεί τη διαδικασία httpd (τουλάχιστον στα συστήματα Redhat-based) και αν δεν το ψευδώνυμο περνά κατά τη διάρκεια της σύνδεσης MySQL χρησιμοποιεί όποιον ζητά τη σύνδεση.


Αν κάνετε τη σωστή σύνδεση στο σενάριό σας, όχι σε ένα που ονομάζεται αρχείο, μπορείτε να πάρετε το ίδιο λάθος;
Το πρόβλημα προκλήθηκε λόγω των ειδικών χαρακτήρων. Δεν είχα φανταστεί ότι «$» θα ήταν μια τέτοια μεγάλη υπόθεση σε κωδικούς πρόσβασης. Τέλος πάντων μπορείτε να βρείτε μια λύση για αυτό [εδώ](https://nadvi.blogspot.com/2011/02/oracle-password-with-or-special.html) . <p>το <strong>server</strong> (που αποστέλλεται το αίτημα post) πρέπει να περιλαμβάνει την κεφαλίδα <code>access-control-allow-headers</code> (κλπ) <strong>στην απάντησή του</strong>. η τοποθέτησή τους στο αίτημά σας από τον πελάτη δεν έχει καμία επίδραση.</p><p>αυτό οφείλεται στο γεγονός ότι εναπόκειται στον διακομιστή να καθορίσει ότι δέχεται αιτήσεις διασταυρούμενης προέλευσης (και ότι επιτρέπει την κεφαλίδα <code>content-type</code> αίτησης και ούτω καθεξής) - ο πελάτης δεν μπορεί να αποφασίσει για τον εαυτό του ότι ένας δεδομένος διακομιστής πρέπει να επιτρέπει την cors.</p> update

κατάφερα να το φτιάξω. το πρόβλημα οφειλόταν ότι η ρύθμηση:

config interface 'wan'

option ifname 'dsl0.835'

option device 'dsl0'

option proto 'pppoe'

option username 'guest@adsl.gr'

option password '******'

option ipv6 'none'

option keepalive '10'

option … <p>μπορείτε να λάβετε ροή εξόδου για τη σύνδεση και να γράψετε τη συμβολοσειρά ερώτησης παραμέτρων σε αυτήν.</p><pre><code>url url = new url("http://yoururl.com"); httpsurlconnection conn = (httpsurlconnection) url.openconnection(); conn.setreadtimeout(10000); conn.setconnecttimeout(15000); conn.setrequestmethod("post"); conn.setdoinput(true); conn.setdooutput(true); list&lt;namevaluepair&gt; params = new arraylist&lt;namevaluepair&gt;(); params.add(new basicnamevaluepair("firstparam", paramvalue1)); params.add(new basicnamevaluepair("secondparam", paramvalue2)); params.add(new basicnamevaluepair("thirdparam", paramvalue3)); outputstream os = conn.getoutputstream(); bufferedwriter writer = new bufferedwriter( new outputstreamwriter(os, "utf-8")); writer.write(getquery(params)); writer.flush(); writer.close(); os.close(); conn.connect(); </code></pre><p>...</p><pre><code>private string getquery(list&lt;namevaluepair&gt; params) throws unsupportedencodingexception { stringbuilder result = new stringbuilder(); boolean first = true; for (namevaluepair pair : params) { if (first) first = false; else result.append("&amp;"); result.append(urlencoder.encode(pair.getname(), "utf-8")); result.append("="); result.append(urlencoder.encode(pair.getvalue(), "utf-8")); } return result.tostring(); } </code></pre> <p>είχα το ίδιο πρόβλημα χρησιμοποιώντας asp.net mvc και <a href="http://victorblog.com/2012/12/20/make-angularjs-http-service-behave-like-jquery-ajax/">βρήκα τη λύση εδώ</a> </p><blockquote> <p>υπάρχει μεγάλη σύγχυση μεταξύ των νεοεισερχομένων στο <strong> angularjs </strong> για το γιατί οι <code>$http</code> λειτουργίες στενογραφίας της υπηρεσίας (<code>$http.post()</code>, κλπ.) δεν φαίνονται να είναι εναλλάξιμες με το <strong> ισοδύναμα jquery </strong> (<code>jquery.post()</code>, κ.λπ.)</p> <p>η διαφορά είναι στον τρόπο <strong> jquery </strong> και <strong> angularjs </strong> σειριοποίηση και μετάδοση των δεδομένων. βασικά, το πρόβλημα έγκειται στη γλώσσα του server σας που δεν είναι σε θέση να καταλάβει τη μετάδοση του angularjs με εγγενή ... από προεπιλογή, <strong> jquery </strong> μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: x-www-form-urlencoded </code></pre> <p>και την εξοικειωμένη σειριοποίηση <code>foo=bar&amp;baz=moe</code>.</p> <p><strong> το angularjs </strong>, ωστόσο, μεταδίδει δεδομένα χρησιμοποιώντας</p> <pre><code>content-type: application/json </code></pre> <p>και <code>{ "foo": "bar", "baz": "moe" }</code></p> <p>η σειριοποίηση json, η οποία, δυστυχώς, μερικές γλώσσες διακομιστή web - <em> και συγκεκριμένα η php </em> - δεν απομακρύνονται εγγενώς.</p> </blockquote><p>δουλεύει άψογα.</p><p><b>κωδικας</b></p><pre><code>// your app's root module... angular.module('mymodule', [], function($httpprovider) { // use x-www-form-urlencoded content-type $httpprovider.defaults.headers.post['content-type'] = 'application/x-www-form-urlencoded;charset=utf-8'; /** * the workhorse; converts an object to x-www-form-urlencoded serialization. * @param {object} obj * @return {string} */ var param = function(obj) { var query = '', name, value, fullsubname, subname, subvalue, innerobj, i; for(name in obj) { value = obj[name]; if(value instanceof array) { for(i=0; i&lt;value.length; ++i) { subvalue = value[i]; fullsubname = name + '[' + i + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value instanceof object) { for(subname in value) { subvalue = value[subname]; fullsubname = name + '[' + subname + ']'; innerobj = {}; innerobj[fullsubname] = subvalue; query += param(innerobj) + '&amp;'; } } else if(value !== undefined &amp;&amp; value !== null) query += encodeuricomponent(name) + '=' + encodeuricomponent(value) + '&amp;'; } return query.length ? query.substr(0, query.length - 1) : query; }; // override $http service's default transformrequest $httpprovider.defaults.transformrequest = [function(data) { return angular.isobject(data) &amp;&amp; string(data) !== '[object file]' ? param(data) : data; }]; }); </code></pre> h επιλογή lock κλειδώνει τον χρήστη και δεν μπορεί να μπεί

-l, --lock

lock the password of the named account. this option disables a password by changing

it to a value which matches no possible encrypted value

(it adds a ´!´ at the beginning of the password).

άρα η λύση είναι να ξεκι… βρέθηκε η λύση. 
η εντολή “mkinitcpio -p linux” δε δουλεύει σωστά στο manjaro (σε αντίθεση με το arch), γιατί έχει διαφορετική ονοματολογία στα kernels, αντί για “linux”, είναι “linux419” , “linux53”, κλπ. 
οπότε θέλει ή να την εκτελέσεις με το σωστό όνομα, ή “mkinitcpio -p” για να τα κάνει rebuild… Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ). Συχνά αυτό επιτυγχάνεται με τη χρήση [«Driven δεδομένων Συνδρομές»](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , αλλά αυτή η λειτουργία είναι διαθέσιμη μόνο σε ορισμένες εκδόσεις του SQL: Enterprise και Business Intelligence, αλλά όχι στο πρότυπο.


Έτσι, υπάρχει μια σειρά από δημιουργικές λύσεις. Αλλά δεν μου αρέσει κάποια από αυτές, και απαιτούν ένα δίκαιο κομμάτι της εργασίας έξω από SSRS.


Οι λύσεις που έχω δει περιλαμβάνουν: Δημιουργία της εγγραφής και στη συνέχεια απενεργοποίηση ή επιτρέπουν την εργασία SQL που στέλνει τη συνδρομή (που προσδιορίζονται από GUID.)


Δημιουργήστε ένα .exe .NET περιτύλιγμα για να χειριστεί την αποστολή του email. Μπορεί να εκτελέσετε το ερώτημα πρώτα να δούμε πόσα επέστρεψε σειρές, και στη συνέχεια, αν χρειαστεί, να δημιουργήσει την έκθεση και να συμπεριληφθεί σε ένα email. τις τελευταίες 2-3 μέρες υπάρχουν κάποιες αναφορές για το πρόβλημα. ο τρόπος για να επιλυθεί το πρόβλημα είναι:

wget -q -o - https://dl.google.com/linux/linux\_signing\_key.pub | sudo apt-key add -

είτε

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 78bd65473cb3bd13

δεν υπάρχει εξ…